Android Wear ウォッチのみに通知を表示しようとしています。通知を電話に表示したくない (アプリを開いている)、アクティビティに直接入れたくない (ただし、アクションの 1 つでアクティビティを開く必要があります)。
私が望むことを達成するために、onDataChanged を使用して WearableListenerService を作成しました。このメソッド内で、通知を作成しようとします。これは私が使用するコードです: @Override public void onDataChanged(DataEventBuffer dataEvents) { Log.d("Listener", "dataChanged");
Intent actionIntent = new Intent(getBaseContext(), WatchMainActivity.class);
actionIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent actionPendingIntent =
PendingIntent.getActivity(getBaseContext(), 0, actionIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
NotificationManagerCompat manager = NotificationManagerCompat.from(getApplicationContext());
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());
Log.d("listener", "Created things");
builder.setContentTitle("Wearable test")
.setContentText("Testing 123")
.setOngoing(true)
.setSmallIcon(R.drawable.ic_launcher)
;
// Create the action
NotificationCompat.Action action =
new NotificationCompat.Action.Builder(R.drawable.ic_full_sad,
getString(R.string.label), actionPendingIntent)
.build();
NotificationCompat.WearableExtender extender = new NotificationCompat.WearableExtender();
extender.addAction(action)
.setContentAction(0)
.setHintHideIcon(true)
;
Log.d("listener", "action created, extending...");
builder.extend(extender);
Log.d("listener", "extended");
manager.cancel(101);
Log.d("listener", "canceled");
manager.notify(101, builder.build());
Log.d("listener", "notified");
Log.d("listener", "created");
}
ログを見ると、次のクラッシュが発生します。
D/listener( 1075): listener created
D/Listener( 1075): dataChanged
D/listener( 1075): Created things
D/listener( 1075): action created, extending...
D/listener( 1075): extended
D/listener( 1075): canceled
W/dalvikvm( 597): threadid=20: thread exiting with uncaught exception (group=0xada2fd70)
E/AndroidRuntime( 597): FATAL EXCEPTION: NotificationCollectorService
E/AndroidRuntime( 597): Process: com.google.android.wearable.app, PID: 597
E/AndroidRuntime( 597): java.lang.ClassCastException: android.os.Bundle cannot be cast to android.app.Notification$Action
E/AndroidRuntime( 597): at android.support.v4.app.NotificationCompatApi20.getActionsFromParcelableArrayList(NotificationCompatApi20.java:145)
E/AndroidRuntime( 597): at android.support.v4.app.NotificationCompat$NotificationCompatImplApi20.getActionsFromParcelableArrayList(NotificationCompat.java:532)
E/AndroidRuntime( 597): at android.support.v4.app.NotificationCompat$WearableExtender.<init>(NotificationCompat.java:1876)
E/AndroidRuntime( 597): at com.google.android.clockwork.stream.StreamManager.stripRemoteViewsFromNotification(StreamManager.java:481)
E/AndroidRuntime( 597): at com.google.android.clockwork.stream.StreamManager.maybeStripRemoteViewsFromNotification(StreamManager.java:473)
E/AndroidRuntime( 597): at com.google.android.clockwork.stream.StreamManager.setItem(StreamManager.java:347)
E/AndroidRuntime( 597): at com.google.android.clockwork.stream.StreamManager.onNotificationPosted(StreamManager.java:253)
E/AndroidRuntime( 597): at com.google.android.clockwork.stream.NotificationCollectorService$ServiceHandler.handleMessage(NotificationCollectorService.java:264)
E/AndroidRuntime( 597): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 597): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime( 597): at android.os.HandlerThread.run(HandlerThread.java:61)
D/listener( 1075): notified
D/listener( 1075): created
そのため、通知内にこのクラッシュの原因となるものがあります。ビルダーで拡張呼び出しを削除すると、正常に動作しますが、アクションはもちろん追加されません。このため、Intent/PendingIntent または WearableExtender 内で何か間違っていると思いますが、何が間違っているのかわかりません。摩耗のドキュメントから例を取得すると、同じクラッシュが発生します。
誰かがこのクラッシュを解決する方法について何か考えがありますか?