jamyspex jamyspex - 1 month ago 25
Android Question

Android Wear notification not showing

Hi I'm writing an Android Wear app that allows the user to control a music player from their watch. I'm trying to do it with a notification with two action buttons. Below is the code that creates/updates the notification when the currently playing song changes, it is from

OnDataChanged()
from the
WearableListenerService
. The data arrives on the emulator as expected and the notification builder is constructed correctly, as I can see it in the debugger. Also the final log line is executed and I can see it in logcat, however the notification is not created on the emulator. Also all other notifications from other apps on my phone show up on emulator!

Any help greatly appreciated, thanks James!

for (DataEvent event : events) {
if (event.getType() == DataEvent.TYPE_CHANGED) {
String path = event.getDataItem().getUri().getPath();
if ("/playmusicremotedata".equals(path)) {
// Get the data out of the event
DataMapItem dataMapItem =
DataMapItem.fromDataItem(event.getDataItem());
final String songTitle = dataMapItem.getDataMap().getString("songTitle");
final String artist = dataMapItem.getDataMap().getString("artist");
final String album = dataMapItem.getDataMap().getString("album");
Asset asset = dataMapItem.getDataMap().getAsset("albumArt");

Bitmap albumArt = loadBitmapFromAsset(asset);

PendingIntent skipForwardPendInt = PendingIntent.getBroadcast(getApplicationContext(), 8, new Intent("net.jamyspex.remoteforgoogleplaymusic.SKIP_FORWARD"), PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent playPausePendInt = PendingIntent.getBroadcast(getApplicationContext(), 7, new Intent("net.jamyspex.remoteforgoogleplaymusic.PLAY_PAUSE"), PendingIntent.FLAG_UPDATE_CURRENT);

Notification.Action playPauseBut = new Notification.Action(R.drawable.play, "Pause/Play", playPausePendInt);
Notification.Action nextBut = new Notification.Action(R.drawable.skip_forward, "Skip", skipForwardPendInt);

// Create the ongoing notification
Notification.Builder notificationBuilder =
new Notification.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(songTitle)
.setContentText(artist + " - " + album)
.setLargeIcon(albumArt)
.setOngoing(true)
.addAction(playPauseBut)
.addAction(nextBut);

// Build the notification and show it
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
Log.i(TAG, "Should have created notification");
} else {
Log.d(TAG, "Unrecognized path: " + path);
}
}
}

Answer

To make the solution more visible to users who may be affected with the same issue - i'm posting this as an answer.

REASON:

The reason was simple: app was muted (probably accidentally) on Android Wear device and this was preventing any notifications from appearing on watch.

While posting any ongoing notification from watch, there will be extra action added automatically. It is called "Mute app" and probably it was pressed in some point in time during development by accident.

Muted apps can be managed in the Android Wear companion app on Settings screen. This can be fairly hard to debug because any code is invoked without any error and there is also no logs in the LogCat about the fact that app is muted.

I hope that it will be helpful for other users that will search for the similar issue in the future:)