我试图仅在Android Wear手表上显示通知。我不希望通知显示在手机上(它有应用程序打开),我不希望它直接在Activity中(但是,其中一个动作应该打开一个Activity)。< / p>
为了实现我的目标,我使用onDataChanged创建了一个WearableListenerService。在这个方法中,我尝试创建通知。这是我使用的代码: @覆盖 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
因此通知中会出现导致此崩溃的内容。当我在构建器中删除extend调用时,它工作正常,但是当然不会添加操作。因此,我认为我在Intent / PendingIntent或WearableExtender中做错了什么,但我不知道我做错了什么。当我从磨损文档中获取示例时,会导致同样的崩溃。
有人知道如何解决此崩溃问题吗?
答案 0 :(得分:1)
我刚刚在DataLayerListenerService(扩展WearableListenerService)中测试了我在onDataChanged回调中发布的代码。 但是......一切正常...... 我只将动作标题中的字符串更改为我的R.string.app_name +活动名称。除此之外 - 没有任何变化。
http://developer.android.com/training/wearables/apps/creating.html
对于仅出现在可穿戴设备上的通知(意思是,它们是 由在可穿戴设备上运行的应用程序发布,你可以使用 标准框架API(API Level 20)对可穿戴设备进行删除 在项目的移动模块中支持库依赖。
http://developer.android.com/training/wearables/apps/layouts.html
注意:在可穿戴设备上创建自定义通知时,您可以使用 标准通知API(API级别20)而不是支持 库。
请尝试这些步骤,特别是切换到标准通知而不是NotificationCompat - 但是您的代码在我的应用中正常复制而没有任何问题:\
答案 1 :(得分:0)
切换到标准4.4W API可以修复它,当您使用support.v4包时,进程com.google.android.wearable.app将崩溃。
使用support.v4包,如果您不想在通知中添加RemoteInput,则可以使用build.addAction(action)
而不是build.extend(extender.addAction(action))
添加操作