アクティビティがバックグラウンドにあるとき、またはアクティビティがまったくないときに、Android から Dart コードを呼び出そうとしています。たとえば、alarmmanager がトリガーされたとき。
これは私のダーツコードです:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
const MethodChannel _kChannel =
MethodChannel('mychannel');
_kChannel.setMethodCallHandler((call) {
if (call.method == 'method1') {
return ...;
}
if (call.method == 'method2') {
return ...;
}
return Future.value();
});
}
Java から:
Application.channel.invokeMethod(method, arguments, new MethodChannel.Result() {...});
channel
私のメインアクティビティから初期化される静的変数です。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
Application.channel = new MethodChannel(getFlutterView(), CHANNEL_ID);
}
これは、アクティビティがフォアグラウンドにあるときに機能します。しかし、バックグラウンドにあるときは、次の通知を受け取ります。FlutterView.send called on a detached view, channel=mychannel
呼び出しは実行されません。バックグラウンドで Android から Dart を呼び出すにはどうすればよいですか?
編集:
私のユースケースは純粋に Android のユースケースです。これは基本的に次の流れです。
- alarmmanager が起動し、ブロードキャスト イベントが受信されます。Dit はライブラリなしでネイティブに実行されます。これは主に、アプリがアクティブでないときに発生します。
- ブロードキャストレシーバーで、Firebase からいくつかのデータを読み取り、通知を設定します。
- Firebase からのデータに基づいて新しいアラームをスケジュールします。
flutter/dart 内では、Firebase からデータを取得するためのビジネス ロジックを既に取得しています。明らかに、私はそのすべてを再び書きたくありませんが、今は Java で書きます。
私は、alarmmanager プラグインとローカル通知プラグインを使用したくありません。どちらも異なる分離で実行され、問題が発生するためです。