The code bellow is supposed to show a heads up notification, but it is not appearing. However, the MessageActivity is starting without the notification shows up. This activity was supposed to start just when clicking the notification.
This problem does not occurs in API 23 (M). It only occurs in API 16 (JELLY_BEAN). Why the heads up notification appears in android M and is not appearing on android JellyBean?
Thank you in advance.
public class RunAlarm extends BroadcastReceiver{
public static final String ACTION = "br.com.irms.randomalarm.RUN_ALARM_ACTION";
private static final int ID_NOTIFICATION = 1;
@Override
public void onReceive(Context context, Intent intent) {
String source = intent.getStringExtra("source");
if(source.equals("scheduled_alarm")) {
Intent showNotificationIntent = new Intent(context, MessageActivity.class);
String contentTitle = context.getString(R.string.alarm);
String contentText = intent.getStringExtra("hour");
createHeadsUpNotificationWithAction(context, showNotificationIntent, contentTitle, contentText, ID_NOTIFICATION);
} else if(source.equals("dismiss_alarm")) {
Toast.makeText(context,"Alarm dismiss",Toast.LENGTH_SHORT).show();
NotificationManagerCompat nm = NotificationManagerCompat.from(context);
nm.cancel(ID_NOTIFICATION);
} else if(source.equals("snooze_alarm")) {
Toast.makeText(context,"Alarm snooze",Toast.LENGTH_SHORT).show();
NotificationManagerCompat nm = NotificationManagerCompat.from(context);
nm.cancel(ID_NOTIFICATION);
}
}
public void createHeadsUpNotificationWithAction((Context context, Intent intent, String contentTitle, String contentText, int id) {
PendingIntent p = getPendingIntent(context, intent, id);
NotificationCompat.Builder b = new NotificationCompat.Builder(context);
b.setDefaults(NotificationCompat.DEFAULT_ALL);
b.setSmallIcon(R.drawable.ic_alarm_black_24dp);
b.setContentTitle(contentTitle);
b.setContentText(contentText);
b.setContentIntent(p);
b.setAutoCancel(true);
b.setPriority(Notification.PRIORITY_MAX);
b.setFullScreenIntent(p,false);
try {
Intent dismissAlarmIntent = new Intent();
dismissAlarmIntent.setAction(ACTION);
dismissAlarmIntent.putExtra("source","dismiss_alarm");
PendingIntent actionDismissAlarmIntent = null;
actionDismissAlarmIntent = PendingIntent.getBroadcast(
context, IdService.getUniqueId(context), dismissAlarmIntent, 0);
Intent snoozeAlarmIntent = new Intent();
snoozeAlarmIntent.setAction(ACTION);
snoozeAlarmIntent.putExtra("source","snooze_alarm");
PendingIntent actionSnoozeAlarmIntent = null;
actionSnoozeAlarmIntent = PendingIntent.getBroadcast(
context, IdService.getUniqueId(context), snoozeAlarmIntent, 0);
b.addAction(R.drawable.ic_delete_black_24dp, "Pause", actionDismissAlarmIntent);
b.addAction(R.drawable.ic_calendar_black_24dp, "Play", actionSnoozeAlarmIntent);
} catch (IOException e) {
e.printStackTrace();
}
NotificationManagerCompat nm = NotificationManagerCompat.from(context);
nm.notify(id, b.build());
}
private static PendingIntent getPendingIntent(Context context, Intent intent, int id) {
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(intent.getComponent());
stackBuilder.addNextIntent(intent);
PendingIntent p = stackBuilder.getPendingIntent(id, PendingIntent.FLAG_UPDATE_CURRENT);
return p;
}
}
This is my androidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="br.com.irms.layouttab">
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name="br.com.irms.randomalarm.MainActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="br.com.irms.randomalarm.RunAlarm">
<intent-filter>
<action android:name="br.com.irms.randomalarm.RUN_ALARM_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<activity
android:name="br.com.irms.randomalarm.MessageActivity"
android:label="@string/title_activity_message"
android:parentActivityName="br.com.irms.randomalarm.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="br.com.irms.randomalarm.MainActivity" />
</activity>
</application>
</manifest>
After some time looking for the answer I found it on the question bellow
HeadsUp Notification not displayed on KitKat
In short the heads up notification was only added in android 5.0. So, it was just appearing in status bar and I did not realize that.