私は(とりわけ)Android Wearデバイスに通知を表示するAndroidアプリケーションを持っています。
これは、Wear モジュールのクラスで WearableListenerService を拡張することによって行われます。Wear モジュールには、BroadcastReceiver を拡張するクラスもあります。
ここでのシナリオは次のとおりです。 - Android Studio からアプリケーションを実行します - Wear デバイスに通知が表示されるように電話アプリケーションを使用します - Wear デバイスを再起動します
今私が欲しいのは、電話に別の通知を表示させると、それがウェアラブルに表示されることです。WearableListenerService が開始されていないため、そうではありません...
そこで、BroadcastManager に ACTION_BOOT_COMPLETED イベントをリッスンさせます。
@Override
public void onReceive(Context context, final Intent intent) {
Log.d(TAG, "onReceive!");
if(intent==null)
return;
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.d(TAG, "Action boot completed");
ComponentName c = context.startService(new Intent(context, OngoingNotificationListenerService.class));
Log.d(TAG, "returned " + c);
return;
}
.
.
.
そして私のマニフェストファイルで:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
.
.
.
<receiver android:name=".ActionsReceiver" android:enabled="true" android:exported="false">
<intent-filter>
<action android:name="com.XX.receiver.action_pause" />
<action android:name="com.XX.receiver.action_resume" />
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
問題は、アプリケーションが BOOT_COMPLETED アクションを受信しないことです。ログを確認したところ、時計の他のリスナーが再起動後にこのイベントを受信していることがわかりましたが、私のリスナーはそうではありません。
これに関するいくつかの投稿を見てきました。たとえば 、アプリケーションを閉じたときに Android BOOT_COMPLETED が受信されないなどです。
これは私の問題と非常に似ていると思います。
私のアンドロイドウェアアプリには、ユーザーが開始できる「メインアクティビティ」がありません。これは、リスナーサービスとレシーバーのみです。ただし、ランチャー インテントを使用してメイン アクティビティをすぐに実装し、時計のランチャーからアプリを起動できるようにしました。これは状況にまったく影響しませんでした。時計を再起動すると、Android Studio から再インストールするまで、アプリからの通知は表示されません。
それで、私は何か重要なことを見逃しましたか?私の WearableListenerService は、時計が再起動されたときに私の操作なしで自動的に開始されるはずですか? (そうではありません...)または、これがアプリの開発者バージョンであることと関係がありますか?
(注:シャットダウンしてから起動も試みました-違いはありません)