Android SDK. Получить NOTIFICATION_SERVICE для возобновления, а не для запуска нового экземпляра - PullRequest
1 голос
/ 12 февраля 2012

Я действительно продвигаюсь вперед с моим приложением для Android.Мне удалось реализовать onDestroy() and onPause() подпрограммы.

Мне также удалось получить службу уведомлений Android, чтобы поместить мой значок с заголовком и телом в панель уведомлений / меню задач.

Единственная проблемас помощью этой службы уведомлений, если мое приложение для Android уже запущено и инициировало функцию onPause(), которая super.onPause(); moveTaskToBack(true);, если пользователь нажимает на уведомление, это вызовет НОВЫЙ экземпляр моего приложения.

Как только пользователь взаимодействует с новым экземпляром, программа аварийно завершает работу, поскольку фоновая версия уже запущена, что вызывает конфликты.

Вот мой код уведомления, мне нужна помощь, чтобы этот код искал уже запущенную версиюмое приложение:

String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificatonManager = (NotificationManager) getSystemService(ns);
int icon = R.drawable.ic_launcher;
CharSequence tickerText = "app name";
long when = System.currentTimeMillis();
CharSequence contentTitle = "app title";
CharSequence contentText = "text";
Intent notificationIntent = new Intent(this, SuperMicProActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
final int signed = 1;
mNotificatonManager.notify(signed, notification);

Я смотрел на onResume() с, может быть, какой-то вариант bringTaskToFront(this).Это существует?

Спасибо,

Ответы [ 2 ]

3 голосов
/ 12 февраля 2012

У вас есть несколько вопросов, ИМХО.

и инициировал функцию onPause (), которая super.onPause (); moveTaskToBack (истина);

Это довольно странное поведение. Почему ты это делаешь?

Как только пользователь взаимодействует с новым экземпляром, программа аварийно завершает работу, поскольку фоновая версия уже запущена, что вызывает конфликты.

Тогда все, что делалось в исходном упражнении, вообще не должно быть в занятии, а в служении. Если у вас больше нет активности на переднем плане, вероятность того, что Android завершит ваш процесс для освобождения памяти, будет довольно высокой и может произойти довольно быстро, в зависимости от того, что еще происходит. Вы, кажется, зависите от того, что старое занятие каким-то образом еще что-то делает. «Фоновая версия» действия не должна делать ничего, что могло бы повлиять на любое другое действие в вашем процессе, и действие, не находящееся на переднем плане, не должно отвечать за действия, которые пользователь может пропустить, если действие переходит в «пуф».

При этом существуют и другие причины, по которым следует избегать использования второй копии своей деятельности, в частности навигации - в том виде, в каком она есть, когда пользователь нажимает кнопку НАЗАД из второй копии операции, он увидит первую копию и запутаться.

Мне нужна помощь, чтобы этот код искал уже запущенную версию моего приложения

Нет, вам "нужна помощь, чтобы этот код искал уже запущенную версию" вашей деятельности. Приложение не является деятельностью. Активность не приложение.

Добавление FLAG_ACTIVITY_CLEAR_TOP и FLAG_ACTIVITY_SINGLE_TOP к вашему Intent решит это:

  Intent i=new Intent(this, SuperMicProActivity.class);

  i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

  PendingIntent pi=PendingIntent.getActivity(this, 0, i, 0);

Это выведет вашу существующую деятельность на первый план и, при необходимости, избавит от других действий в вашей задаче.

0 голосов
/ 12 февраля 2012

Да, что-то подобное возможно. Вам нужно использовать флаги.

http://developer.android.com/reference/android/content/Intent.html#setFlags(int)

Вы должны рассмотреть эти 2 в частности.

FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_CLEAR_TOP

...