У меня есть раздражающая проблема с поведением диспетчера переднего плана. Иногда вместо вызова onNewIntent()
он полностью воссоздает активность, что нарушает рабочий процесс приложения.
Моя конкретная ситуация: Activity A – это MainActivity, которая использует диспетчеризацию переднего плана. Все работает как надо. Однако в моем действии B, которое запускается из браузера (действие VIEW), отправка переднего плана больше не работает при некоторых обстоятельствах.
Рабочий процесс:
Я запускаю MainActivity, переключаюсь в браузер (не закрывая MainActivity), запускаю действие B и подключаю свое устройство NFC --> оно создает новое действие B.
Я запускаю MainActivity и снова закрываю его. После этого я переключаюсь
в браузер, запускаю активность B и подключаю свое устройство NFC --> все работает сonNewIntent()
Код правильный, т.е. если я дважды подключаю устройство NFC в первом сценарии, во второй раз оно работает как надо, но не в первый раз. В MainActivity и действии B я окончательно вызываю метод disableForegroundDispatch() в методе действия onPause().
Есть ли решение для моей конкретной проблемы? Для меня это звучит как ошибка.
Изменить:
public void resume(Activity targetActivity) {
if (nfc != null && nfc.isEnabled()) {
// nfc is the default NFC adapter and never null on my devices
Intent intent = new Intent(targetActivity, targetActivity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(targetActivity, 0, intent, 0);
nfc.enableForegroundDispatch(targetActivity, pendingIntent, null, new String[][] { new String[] { IsoDep.class.getName() } });
}
}
public void pause(Activity targetActivity) {
if (nfc != null && nfc.isEnabled()) {
nfc.disableForegroundDispatch(targetActivity);
}
}
Эти методы вызываются в соответствующих методах в каждом действии. Спасибо за помощь!
Решение. После долгих поисков я наконец нашел проблему. Логкат напечатан:
- startActivity вызывается из контекста, отличного от Activity; форсирование Intent.FLAG_ACTIVITY_NEW_TASK для: Intent
Я нашел другие проблемы в Stackoverflow, где у людей была такая же проблема с NotificationManager, но все подсказки мне не помогли. Добавление флага singleTask к моей активности B помогло мне, но, честно говоря, я этого не понимаю, потому что контекст всегда является активностью.
Я удалил весь код из MainActivity, и первый сценарий все еще не работал. Я удалил MainActivity из манифеста, и после этого все было в порядке. Может быть, проблема в том, что экземпляр приложения запущен, а активность B запускается из браузера? Я не знаю.
В любом случае, спасибо за помощь парню NFC!
PendingIntent
. - person NFC guy   schedule 23.04.2012