0

我有三種不同的操作通知。即通話,短信,貪睡。但是每當通知來到時,我點擊任何動作,然後只有主要活動打開,但沒有動作執行。但如果應用程序是開放的,那麼行動就會得到執通知操作需要點擊兩次才能執行操作

如果應用打開:操作將獲得執行並通知關閉。
如果應用程序未打開:應用程序將打開,無操作執行並且通知將停留在那裏。

這裏是我的ReminderService.java

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()); 

這裏是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); 
       } 
      } 
     } 
    } 
} 

所以我需要點擊兩次執行操作,點擊打開應用程序,第二執行操作。

請讓我知道我在做什麼錯。

回答

1

如果當您單擊Notification應用程序沒有運行,這將啓動一個新實例的MainActivity()並調用onCreate()Intent,但它不會通話onNewIntent()。因此,在onCreate()中,您需要檢查該應用是否因點擊Notification(檢查Intent中的「extras」或「action」)而被啓動,如果需要,您需要撥打中的executeNotification()

相關問題