Как я должен делать извещения обратно в действие без новых намерений
от Android Development, я реализую простое уведомление по образцу кода, но в своем приложении я не хочу новых намерений и снова создаю активность, я просто хочу вернуться к моему последнему действию (это интерфейс пользователя mediaplayer). если я использую образец кода, он создаст новое действие
Intent resultIntent = new Intent(this, ResultActivity.class);
Я комментирую относительный код о новом намерении и получил уведомление, но не имел представления о том, как вернуться к моей последней активности...
Вернемся к моему приложению с длинного нажатия клавиши "домой" и коснитесь моего приложения в порядке.
что я хочу, так же, как это.
bleow - образец кода из Android Development, я прокомментирую новую часть намерения.
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!");
/*Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);*/
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(mId, mBuilder.build());
[ОБНОВЛЕНИЕ]
Я думал, что мне нужно установить флаг для намерения и правильности действий.
поэтому для активности я хочу вернуться к я set
android:launchMode="singleInstance"
и потому, что я не хочу нового действия от намерения, я просто хочу свою последнюю активность, поэтому я добавляю
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
из документации, которую я получил, используя Pendingintent.contentIntent, он должен включать флаг FLAG_ACTIVITY_NEW_TASK и при использовании этого флага, если задача уже запущена для вашей активности начиная, новая активность не будет запущена; вместо этого текущая задача просто будет перенесена в переднюю часть экрана с состоянием, в котором оно было последним. Поэтому я также добавляю
Intent.FLAG_ACTIVITY_NEW_TASK
но из logCat, я все еще видел, что, когда я касаюсь уведомления для возврата к активности, функция pendingintent все еще вызывает функцию onCreate(), а не просто показывает последнее действие, которое все еще "живое".
Ответы
Ответ 1
Если вы хотите вызвать Activity from background, попробуйте следующее:
Intent intent = new Intent(this, YourLauncherActivity.class);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
intent, 0);
mBuilder.setContentIntent(pendingIntent);
Если вы нажмете "Уведомление" на "Homescreen", последний отображаемый "Активность вашего приложения" выйдет на передний план, не запустив его. Если активность была убита системой, вы получите новое действие.
Ответ 2
В режиме SingleTop
я использую этот метод без явного определения класса активности root:
Intent intent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER)
.setComponent(getPackageManager().getLaunchIntentForPackage(getPackageName()).getComponent());
и для возобновления последнего действия извещения:
builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, 0));
или для возобновления последнего действия со службы:
try {
PendingIntent.getActivity(this, 0, intent, 0).send();
} catch (CanceledException e) {
e.printStackTrace();
}
Ответ 3
Я использовал PendingIntent.getActivities вместо getActivity. Это хорошо работает в моем проекте.
Intent backIntent = new Intent(this, HomeActivity.class);
backIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent notificationIntent = new Intent(this, NextActivity.class);
final PendingIntent pendingIntent = PendingIntent.getActivities(this, 1,
new Intent[] {backIntent, notificationIntent}, PendingIntent.FLAG_ONE_SHOT);
Ответ 4
Для меня это сработало:
.setContentIntent(
PendingIntent.getActivity(
context,
0,
new Intent(context, YOUR_MAIN.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP ),PendingIntent.FLAG_ONE_SHOT))
FLAG_ONE_SHOT: НЕ СОЗДАТЬ ДВАЖДЫ (связанное с Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)