Der folgende Code soll eine Benachrichtigung anzeigen, aber es wird nicht angezeigt. Die MessageActivity wird jedoch gestartet, ohne dass die Benachrichtigung angezeigt wird. Diese Aktivität sollte nur beim Klicken auf die Benachrichtigung gestartet werden.Benachrichtigung wird nicht angezeigt
Dieses Problem tritt in API 23 (M) nicht auf. Es tritt nur in API 16 (JELLY_BEAN) auf. Warum erscheint die Kopfmeldung in Android M und erscheint nicht auf Android JellyBean?
Vielen Dank im Voraus.
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;
}
}
Das ist mein 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>