簡體   English   中英

多個通知未在android中顯示

[英]Multiple Notifications not showing in android

在我的 android 應用程序中,我願意在特定的一天顯示多個通知,為此我使用警報管理器和廣播接收器的問題是當我使用警報時它工作正常但是當我添加通知構建器以顯示通知時它不起作用

這是我的主要活動

  public static final String ACTION_ONE = "Hello, Test Message 1";
public static final String ACTION_TWO = "Hello, Test Message 2";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE);
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(System.currentTimeMillis());

    Intent myIntent1 = new Intent(this, AlarmBroadCustReciver.class);
    myIntent1.setAction(ACTION_ONE);
    PendingIntent pendingIntent1 = PendingIntent.getBroadcast(this, 1253, myIntent1,
            PendingIntent.FLAG_UPDATE_CURRENT);
    // Set the time for first alarm here
    cal.set(2015, 10, 20, 15, 55);
    alarmManager1.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent1);

    Intent myIntent2 = new Intent(this, AlarmBroadCustReciver.class);
    myIntent2.setAction(ACTION_TWO);
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(this, 1263, myIntent2,
            PendingIntent.FLAG_UPDATE_CURRENT);
    // Set the time for second alarm here
    cal.set(2015, 10, 20, 15, 56);
    alarmManager1.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent2);
    // In this way set time for all the rest of the alarms

這是廣播接收器

public class AlarmBroadCustReciver extends BroadcastReceiver {

public static final String ACTION_ONE = "Hello, welcome to the Server1";
public static final String ACTION_TWO = "Hello, welcome to the Server2";

@Override
public void onReceive(Context context, Intent intent) {
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
    builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
    builder.setContentTitle(context.getString(R.string.app_name));
    if (intent.getAction().equalsIgnoreCase(ACTION_ONE)) {
        builder.setContentText("Alarm one");
    } else {
        builder.setContentText("Alarm two");
    }
    Notification notification = builder.build();
    int notificationID = 0;
    notificationManager.notify(notificationID, notification);

您需要為每個 Notification 傳遞不同的通知 ID。 如果您傳遞相同的 id(即在您的情況下為 0),則現有通知將使用新數據進行更新。 更改通知 ID:例如有一個變量並增加它。 通知ID++

我有一個類似的問題,我創建了多個具有不同 ID 的通知,但是,當我單擊一個通知時,只有第一個打開特定屏幕,所有順序通知都被忽略(單擊它們沒有任何作用,它們是剛剛被解雇)。 然后我嘗試這樣做:

intent.setAction(context.getPackageName() + "." + notificationId);

這意味着每個獨特的通知也帶有自己獨特的 Intent,在這種情況下,Intent 不會被忽略,並且每個通知都打開了所需的屏幕。 我必須注意我的意圖是相同的(例如 NoteDetails.class),所以我想我不得不以某種方式將它們分開......我很高興它無論如何都能工作。

Box 的回答對我來說是一個正確的方向。

我只需要更改傳遞給 AlarmManager 的 PendingIntent 中的 requestCode,因此它不是相同的值。

舊代碼:

PendingIntent pI = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

新代碼:

PendingIntent pI = PendingIntent.getBroadcast(context, notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM