Уведомление о действии нужно дважды щелкнуть, чтобы выполнить действие
У меня есть уведомление с тремя различными действиями. т.е. звони, смс, откладывай. Но всякий раз, когда приходит уведомление, я нажимаю на любое действие, тогда открываются только основные действия, но никакие действия не выполняются. но если приложение открыто, то действие выполняется.
Если приложение открыто: действие будет выполнено, а уведомление отклонено.
Если приложение не открыто: приложение откроется, никакие действия не будут выполнены, и уведомление останется там.
Вот мой 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
), и если это так, вам нужно позвонить executeNotification()
в onCreate()
,