我收到了三种不同操作的通知。即呼叫、短信、贪睡。但是,每当收到通知时,我都会单击任何操作,然后仅打开主要活动但不执行任何操作。但如果应用程序已打开,则会执行操作。
如果 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);
}
}
}
}
}
所以我需要点击两次才能执行操作,一次点击打开应用程序,第二次执行操作。
请让我知道我做错了什么。