При желании запуск действий и использование уведомлений от служб в Android. Запускать или уведомлять только при наличии определенного приложения

У меня есть служба, которую я повторно использую (это одновременно "привязанная" и "запущенная" служба) в моем собственном приложении, потому что она выполняет сбор полезных данных Интересно. Все работало но заметил проблему. В этом коде создается исключение:

Intent dialogIntent = new Intent();
    dialogIntent.setClassName(service.getBaseContext(), "com.mycompany.receiver.ui.DialogActivity"); // names changed to protect the innocent
    dialogIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    dialogIntent.putExtra("message", message);
    service.getApplicationContext().startActivity(dialogIntent);

Исключение предупреждает о «неизвестной активности» и «вы проверили манифест». Это не вызвано тем, что я не поместил активность в манифест. Фактически, здесь действительно должно быть исключение, потому что в моем приложении нет этого действия! Это упражнение было написано для исходного приложения. Я сначала этого не заметил, потому что этот код срабатывает только тогда, когда собранные данные выходят за пределы определенного диапазона. Я могу изменить код службы, но служба и исходное приложение должны продолжать работать, как раньше. Просто в моем приложении меня не особо интересует всплывающая активность для этого конкретного сообщения (для меня это не так важно).
Я действительно думал об этом, и я мог просто бросить блокировку try / catch вокруг всего. Но это кажется немного взломанным. Если что-то еще не так в исходной паре приложение / сервис, я хочу знать об этом. Я пришел к следующим идеям, и мне нужна рука помощи, чтобы указать мне правильное направление.

  1. Есть ли способ узнать, какие приложения запущены в данный момент?
  2. Или, возможно, сейчас на переднем плане?
  3. Или как насчет привязки к службе в настоящее время?

Меня интересует 1-3 (для общих знаний и для решения этой проблемы), но 2, вероятно, является наиболее полезным . В конце концов, к службе может быть привязано несколько приложений, и я не уверен, что хочу вывести исходное приложение на передний план, а не свое собственное только из-за этого сообщения. И наконец.... Забудь все, что я сказал, и 4. Как бы вы решили эту проблему?

У меня такая же очень похожая проблема в другом месте кода:

Intent toLaunch = new Intent();
    toLaunch.setClassName(context, "com.mycompany.receiver.ui.BankingActivity");

    toLaunch.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent intentBack = PendingIntent.getActivity(context, 0, toLaunch, PendingIntent.FLAG_CANCEL_CURRENT);

    notify.setLatestEventInfo(context, title, message, intentBack);
    notifier.notify(NOTIFY_1, notify);

Эта не вызывает исключения; он выводит уведомление, и когда я нажимаю на него, запускается исходное приложение. На самом деле это может быть нормально, но, опять же, было бы неплохо не иметь этого (или, возможно, компромисс - уведомить уведомителя, если приложение хотя бы привязано, но не обязательно на переднем плане). Мысли?

Большое спасибо, Dave

5
задан Dave 6 January 2012 в 17:53
поделиться