2017-07-06 7 views
0

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> 

Répondre

0

Après un certain temps à la recherche de la réponse je l'ai trouvé sur la question ci-dessous

HeadsUp Notification not displayed on KitKat

En bref, les têtes de la notification n'a été ajoutée dans Android 5.0. Donc, il apparaissait juste dans la barre d'état et je ne m'en suis pas rendu compte.

0

vous pouvez gérer la notification comme celui-ci Ex: - si (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); 
    }