Le code ci-dessous est censé afficher une notification en tête, mais il n'apparaît pas. Cependant, MessageActivity démarre sans que la notification ne s'affiche. Cette activité était supposée démarrer juste au moment de cliquer sur la notification.n'apparaît pas
Ce problème ne se produit pas dans l'API 23 (M). Cela se produit uniquement dans l'API 16 (JELLY_BEAN). Pourquoi la notification tête haute apparaît dans Android M et n'apparaît pas sur Android JellyBean?
Merci d'avance.
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;
}
}
Ceci est mon 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>