Как вывести Android-активность на фронт через уведомление - PullRequest
13 голосов
/ 28 июля 2010

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

Ответы [ 4 ]

23 голосов
/ 31 мая 2011
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);
    ...
}
8 голосов
/ 21 июля 2011

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

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>

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

0 голосов
/ 06 октября 2015

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

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());
    }
0 голосов
/ 28 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...