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

Как перенести существующую деятельность Android на фронт через уведомление

У меня есть одно приложение для Android, когда он запускает службу, я хочу показать уведомление в строке состояния. Затем пользователь может перейти к другому приложению, нажав клавишу HOME. Однако, когда я пытаюсь вернуть предыдущее запущенное приложение на Фронт через значок уведомления, есть некоторые проблемы с существующей деятельностью. Даже я объявляю его как режим "Single Top" (я хочу запустить существующую активность, так как есть связанная с ней работа), так или иначе, что активность OnDestroy была вызвана до OnResume. Вот мой код создания объекта уведомления. Не могли бы вы указать, что это не так. Благодарю.

private void showNotification ()
{

  Intent toLaunch = new Intent(getApplicationContext(),
                                          MySingleTopActivity.class);

  PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(),   0,toLaunch, PendingIntent.FLAG_UPDATE_CURRENT);

  notification.setLatestEventInfo(getApplicationContext(),
         getText(R.string.GPS_service_name), text, intentBack);
....
}
4b9b3361

Ответ 1

private void showNotification() {
    Intent toLaunch = new Intent(getApplicationContext(), MySingleTopActivity.class);

    //add these two lines will solve your issue
    toLaunch.setAction("android.intent.action.MAIN");
    toLaunch.addCategory("android.intent.category.LAUNCHER");

    PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(), 0, toLaunch, PendingIntent.FLAG_UPDATE_CURRENT);

    notification.setLatestEventInfo(getApplicationContext(), getText(R.string.GPS_service_name), text, intentBack);
    ...
}

Ответ 2

Я бы порекомендовал вам сделать это,

private void showNotification () 
{

Intent toLaunch = new Intent(getApplicationContext(), DummyActivity.class);

// You'd need this line only if you had shown the notification from a Service
toLaunch.setAction("android.intent.action.MAIN");

PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(), 0,toLaunch, PendingIntent.FLAG_UPDATE_CURRENT);

.... 
}

DummyActivity должен просто быть активностью, которая всегда заканчивается в событии oncreate.

В файле манифеста добавьте эти строки

<activity class=".DummyActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
    </intent-filter>
</activity>

Надеюсь, это поможет...

Ответ 3

Другой способ запуска вашего пакета.

private void NotificationwithLaucherSelfPackage(Context context , int notification_id){
        Notification noti = new Notification.Builder(context)
                .setContentTitle("Your Title")
                .setContentText("Your Text")
                .setSmallIcon(R.drawable.abc_ic_menu_share_mtrl_alpha)
                .setContentIntent(PendingIntent.getActivity( context ,notification_id , getLauncherIntent(context) , PendingIntent.FLAG_UPDATE_CURRENT))
                .build();
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
    }

private Intent getLauncherIntent(Context context){
        return context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
    }

Ответ 4

Когда действие находится в фоновом режиме, Android может в любой момент убить действие для освобождения ресурсов. Подробную информацию о жизненном цикле см. В документации Activity.

Ваша деятельность должна быть готова сохранить ее состояние в методах onPause или onSaveInstanceState. В приведенном выше документе содержатся дополнительные сведения о сохранении устойчивого состояния.