2017-07-06 79 views
0

代碼波紋管應該顯示擡頭通知,但它不出現。但是,MessageActivity在沒有顯示通知的情況下開始。此活動應該在點擊通知時開始。通知不會出現

在API 23(M)中不會發生此問題。它只發生在API 16(JELLY_BEAN)中。爲什麼擡頭通知出現在android M中,並沒有出現在android JellyBean上?

預先感謝您。

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; 
    } 
} 

這是我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> 

回答

0

一段時間後,爲尋找答案,我發現它的問題波紋管

HeadsUp Notification not displayed on KitKat

總之擡起頭才被添加通知在android 5.0中。所以,它只是出現在狀態欄中,我沒有意識到這一點。

0

您可以管理這樣 防爆通知: - 如果(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); 
    }