Android java предлагает зарегистрировать BroadcastReceiver, проверяющий AudioManager.ACTION_AUDIO_BECOMING_NOISY , для прослушивания системы, передающей сообщение ACTION_AUDIO_BECOMING_NOISY, когда воспроизводится звук, но затем гарнитура отключается или устройство Bluetooth отключается.
Есть ли способ сделать это во флаттере, чтобы отреагировать на событие, например, при отключении гарнитуры во время воспроизведения звука?
С подсказкой в ответе ниже я получилэто происходит, но только в режиме отладки, а не в готовом к выпуску APK.Вот что я сделал:
Java:
public class MainActivity extends FlutterActivity {
public static final String STREAM = "XXX";
public static String TAG = "player/java file";
private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
private BecomingNoisyReceiver myNoisyAudioStreamReceiver = null;
private class BecomingNoisyReceiver extends BroadcastReceiver {
final EventChannel.EventSink eventSink;
BecomingNoisyReceiver(EventChannel.EventSink eventSink){
super();
this.eventSink = eventSink;
}
@Override
public void onReceive(Context context, Intent intent) {
if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {
Log.w(TAG, "Noisy Receiver activated");
eventSink.success("success");
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
new EventChannel(getFlutterView(), STREAM).setStreamHandler(
new EventChannel.StreamHandler() {
@Override
public void onListen(Object args, final EventChannel.EventSink events) {
Log.w(TAG, "adding listener");
myNoisyAudioStreamReceiver = new BecomingNoisyReceiver(events);
registerReceiver(myNoisyAudioStreamReceiver, intentFilter);
}
@Override
public void onCancel(Object args) {
Log.w(TAG, "cancelling listener");
unregisterReceiver(myNoisyAudioStreamReceiver);
}
}
);
}
}
И в Dart, в расширении класса State:
static const platform = const EventChannel('XXX');
StreamSubscription _noisySubscription;
в initState ():
_noisySubscription = null;
Всякий раз, когда мне это нужно:
if(_noisySubscription == null){
_noisySubscription = platform.receiveBroadcastStream().listen(_handleNoisy);
}
Всякий раз, когда это нужно остановить:
_noisySubscription.cancel().then((_){_noisySubscription = null;});
Любой намек, как решить эту проблему?