我收到了三种不同行为的通知。即通话,短信,贪睡。但无论什么时候通知,我点击任何动作,然后只打开主要活动但没有动作执行。但如果应用程序处于打开状态,则会执
如果应用程序打开:操作将执行并通知解除 如果应用程序未打开:应用程序将打开,不执行任何操作,通知将保留在那里。
这是我的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);
}
}
}
}
}
所以我需要点击两次才能执行操作,一次单击打开app,第二次执行操作。
请让我知道我在做什么错。
答案 0 :(得分:1)
如果点击Notification
时应用未运行,则会启动MainActivity()
的新实例并使用onCreate()
致电Intent
,但< strong>不会致电onNewIntent()
。因此,在onCreate()
中,您需要检查应用是否因为点击Notification
而启动(请查看&#34;额外内容&#34;或&#34;操作&#34; Intent
),如果是,则需要在executeNotification()
中致电onCreate()
。