2017-07-06 28 views
0

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> 

Antwort

0

Nach einiger Zeit nach der Antwort suchend ich es unten

auf die Frage gefunden

HeadsUp Notification not displayed on KitKat

kurz in den Köpfen Benachrichtungsmeldung nur hinzugefügt wurde in Android 5.0. Also, es erschien nur in der Statusleiste und das habe ich nicht bemerkt.

0

Sie können Meldung wie diese Ex verwalten: - if (currentapiVersion < android.os.Build.VERSION_CODES.HONEYCOMB) {

 notification = new Notification(icon, text, time); 
     notification.setLatestEventInfo(this, title, text, contentIntent); // This method is removed from the Android 6.0 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 
     mNM.notify(NOTIFICATION, notification); 
    } else { 
     NotificationCompat.Builder builder = new NotificationCompat.Builder(
       this); 
     notification = builder.setContentIntent(contentIntent) 
       .setSmallIcon(icon).setTicker(text).setWhen(time) 
       .setAutoCancel(true).setContentTitle(title) 
       .setContentText(text).build(); 

     mNM.notify(NOTIFICATION, notification); 
    } 
Verwandte Themen