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

У меня есть одно приложение для Android, когда он запускает службу, я хочу показать уведомление в строке состояния. Затем пользователь может перейти к другому приложению, нажав клавишу HOME. Однако, когда я пытаюсь вернуть предыдущее запущенное приложение на Front с помощью значка уведомлений, есть некоторые проблемы с существующей деятельностью. Даже я объявляю его режимом «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); .... } 

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

 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); ... } 

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

 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> 

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

Еще один способ запуска вашего пакета.

 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()); } 

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

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