0

我收到了三种不同操作的通知。即呼叫、短信、贪睡。但是,每当收到通知时,我都会单击任何操作,然后仅打开主要活动但不执行任何操作。但如果应用程序已打开,则会执行操作。

如果 App Open : Action 会被执行并且通知会被关闭。
如果应用程序未打开:应用程序将打开,不执行任何操作并且通知将保留在那里。

这是我的 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);
                }
            }
        }
    }
}

所以我需要点击两次才能执行操作,一次点击打开应用程序,第二次执行操作。

请让我知道我做错了什么。

4

1 回答 1

1

如果单击 时应用程序未运行Notification,这将启动 的新实例MainActivity()并使用 调用onCreate()Intent不会调用onNewIntent()。因此,onCreate()您需要检查应用程序是否由于单击a而启动Notification(检查“附加”或“操作”中的),如果是,Intent则需要调用executeNotification()onCreate()

于 2017-07-20T12:01:56.193 回答