У меня есть служба, которую я повторно использую (это «связанная» и «запущенная» служба) в моем собственном приложении, потому что оно выполняет много полезного сбора данных, в которых я заинтересован. Все работало, но я заметил, чтопроблема.В этом коде создается исключение:
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-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);
Этане бросает исключения;он выдает уведомление, и когда я нажимаю на него, запускается оригинальное приложение.На самом деле это может быть хорошо, но, опять же, было бы неплохо не иметь этого (или, возможно, компромисс - уведомить уведомителя, если приложение хотя бы связано, но не обязательно на переднем плане).Мысли?
Большое спасибо, Дейв