0

Ich habe eine Benachrichtigung mit drei verschiedenen Aktionen. d.h. Anruf, SMS, Schlummern. Aber wenn eine Benachrichtigung kommt, klicke ich auf irgendeine Aktion, dann öffne nur die Hauptaktivität, aber keine Aktion. Aber wenn die App geöffnet ist, wird die Aktion ausgeführt.Benachrichtigung Aktion muss zweimal klicken, um die Aktion auszuführen

Wenn App öffnen: Aktion wird ausgeführt und Benachrichtigung entlassen.
Wenn App nicht geöffnet: App wird geöffnet, keine Aktion ausführen und Benachrichtigung bleibt dort.

Hier mein ReminderService.java ist

Intent intentCall = new Intent(this, MainActivity.class); 
    intentCall.setAction(Constants.NOTIFY_CALL); 
    intentCall.putExtra("rowId", rowId); 
    intentCall.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent pendingIntentCall = PendingIntent.getActivity(this, (int)rowId, intentCall, PendingIntent.FLAG_UPDATE_CURRENT); 

    //Maybe intent 
    Intent intentSMS = new Intent(this, MainActivity.class); 
    intentSMS.setAction(Constants.NOTIFY_SMS); 
    intentSMS.putExtra("rowId", rowId); 
    intentSMS.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent pendingIntentSms = PendingIntent.getActivity(this, (int)rowId, intentSMS, PendingIntent.FLAG_UPDATE_CURRENT); 

    Intent snoozeIntent = new Intent(this, MainActivity.class); 
    snoozeIntent.setAction(Constants.NOTIFY_SNOOZE); 
    snoozeIntent.putExtra("rowId", rowId); 
    snoozeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent pendingIntentSnooze = PendingIntent.getActivity(this, (int)rowId, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    //Initialize NotificationManager using Context.NOTIFICATION_SERVICE 
    NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
    //Prepare Notification Builder 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this); 


    if(notes.length() <= 0){ 
     notificationBuilder.setContentText("Do you want to call or sms to "+name); 
     notificationBuilder.setStyle(new NotificationCompat.BigTextStyle() 
       .bigText("Do you want to call or sms to "+name)); 

    } else { 
     notificationBuilder.setContentText(notes); 
     notificationBuilder.setStyle(new NotificationCompat.BigTextStyle() 
       .bigText(notes)); 
    } 

    notificationBuilder.setContentTitle(name); 
    notificationBuilder.setSmallIcon(getNotificationIcon()); 
    notificationBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)); 
    notificationBuilder.addAction(R.mipmap.ic_stat_call, "", pendingIntentCall); 
    notificationBuilder.addAction(R.mipmap.ic_stat_sms, "", pendingIntentSms); 
    notificationBuilder.addAction(R.mipmap.ic_stat_snooze, "", pendingIntentSnooze); 
    notificationBuilder.setAutoCancel(true);   

    notificationManager.notify((int)rowId, notificationBuilder.build()); 

Hier ist MainActivity.java

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 

    executeNotification(intent); 
} 

private void executeNotification(Intent intent) { 

    LogFile.appendLog(" In Execute Notification : " + intent.getExtras().getLong("rowId")); 
    long rowId; 
    if (intent.getExtras() != null) { 
     if (intent.getExtras().getLong("rowId") > 0) { 
      LogFile.appendLog("Row Id received : -" + intent.getExtras().getLong("rowId")); 
      rowId = intent.getExtras().getLong("rowId"); 
      NotificationManager mNotificationManager = 
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
      mNotificationManager.cancel((int) rowId); 
      RemindersDbAdapter mDBHelper = new RemindersDbAdapter(this); 
      mDBHelper.open(); 
      Cursor cursor = mDBHelper.fetchReminder(rowId); 
      String Number = cursor.getString(cursor.getColumnIndex(RemindersDbAdapter.KEY_NUMBER)); 
      if (intent.getAction() != null) { 
       if (intent.getAction().equalsIgnoreCase(Constants.NOTIFY_CALL)) { 
        LogFile.appendLog("executeNotification() : received notification Call time:" + " rowId : " + rowId); 

        makeReminderCall(Number); 
       } else if (intent.getAction().equalsIgnoreCase(Constants.NOTIFY_SMS)) { 
        LogFile.appendLog("executeNotification() : received notification SMS :" + " rowId : " + rowId); 
        sendReminderSMS(Number); 
       } else if (intent.getAction().equalsIgnoreCase(Constants.NOTIFY_SNOOZE)) { 
        LogFile.appendLog("executeNotification() : received notification SNOOZE :" + " rowId : " + rowId); 
        snoozeReminder((int) rowId); 
       } 
      } 
     } 
    } 
} 

Also muss ich zweimal klicken Aktion auszuführen, mit einem Klick App und zweite öffnen Aktion auszuführen.

Bitte lassen Sie mich wissen, was ich falsch mache.

Antwort

1

Wenn die App nicht läuft, wenn Sie auf den Notification klicken, wird dies eine neue Instanz von MainActivity() beginnen und onCreate() mit den Intent nennen, aber es wird nicht Anruf onNewIntent(). Daher müssen Sie in onCreate() überprüfen, ob die App gestartet wurde, indem Sie auf eine Notification klicken (überprüfen Sie die "Extras" oder die "Aktion" in der Intent), und wenn ja, müssen Sie executeNotification() in onCreate() anrufen.

Verwandte Themen