Подтвердить что ты не робот

Как я должен делать извещения обратно в действие без новых намерений

от 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(), а не просто показывает последнее действие, которое все еще "живое".

4b9b3361

Ответ 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)