2016-03-25 9 views
1

При сканировании тега NFC в приложении с включенной диспетчером переднего плана onPause() вызывается до onNewIntent(). Возможно ли получить намерение NFC уже в onPause(), чтобы я мог остановить (или нет) процессы в соответствии с происхождением намерения?NFC намерение называтьPause before onNewIntent - Как узнать происхождение вызова onPause?

Поскольку деятельность находится на переднем плане и не должна приостанавливаться/возобновляться при проверке тега, и поскольку у меня есть задачи, которые необходимо остановить или начать в /onResume, вы можете увидеть эту проблему.

getIntent().getAction() всегда «ГЛАВНАЯ», но, безусловно, должен быть способ получить более точное описание намерения? Или невозможно узнать, что это намерение NFC до ввода onNewIntent()?

+0

вставьте фильтры намерений. Я предполагаю, что проблема в ваших фильтрах намерений. – Akash

+0

Это не проблема с IntentFilter. IntentFilter из NFC читается только в методе onNewIntent() и еще не существует в onPause(). Мне нужно, чтобы можно было определить, вызывалась ли функция onPause() системой или пользователем. – zuokuok

+0

On Tap NFC onPause не следует вызывать. Вы уверены, что ваши события NFC получаются? – Akash

ответ

3

Нет, вы не сможете узнать, что ожидает нового, до того как оно будет доставлено вашей деятельности в onNewIntent(). Это точка обратного вызова onNewIntent(): Предоставьте информацию о новом намерении вашей деятельности. Только тогда, когда этот метод вызывается, вы можете получить новое намерение с помощью параметра этого метода intent:

@Override 
protected void onNewIntent(Intent intent) { 
    ... 
} 

Обратите внимание, что getIntent() всегда будут возвращать намерение, что первоначально начал вашу деятельность, если явно не обновлять, что намерение с помощью setIntent(newintent). Поэтому, если вы начали свою деятельность через пусковую установку, вы получите намеренное действие MAIN.

/onResume() вызван в связи с тем, как служба NFC отправляет намерение вашей деятельности. Вы ничего не можете с этим поделать. На самом деле это не должно быть чем-то, что вам нужно различать в логике вашего приложения. Если вы вызываете , вы должны делать то, что вы обычно делаете там, независимо от того, было ли это вызвано из-за явного взаимодействия пользовательского интерфейса с другим компонентом пользовательского интерфейса перед вами или из-за того, что система перемещает некоторый (невидимый) компонент пользовательского интерфейса перед ваша. Если ваша текущая логика действительно нуждается в различии между этими двумя, то, вероятно, лучше сделать это в onStop.

+0

Вместо этого я использовал onStart/onStop, когда заметил, что они не вызываются при проверке тега. Ваш ответ присоединяется к моему решению, поэтому я проверю его. – zuokuok