2015-07-14 2 views
0

У меня есть приложение с несколькими actitivities и первой деятельности принимает намерение TAG_DISCOVERED:Как прекратить получать намерение TAG_DISCOVERED из тега?

<activity android:name="com.iba.main.MainActivity" android:label="@string/app_name" 
      android:launchMode="singleTask"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN"/> 
     <category android:name="android.intent.category.LAUNCHER"/> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.nfc.action.TAG_DISCOVERED"/> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

Все другие виды деятельности описаны в AndroidManifest.xml следующим образом:

<activity android:name="com.iba.etd.EtdActivity" android:launchMode="singleTask" /> 

Но когда EtdActivity открыт , замысел TAG_DISCOVERED снова появляется, и первое действие MainActivity открывается во второй раз. Как отключить получение этого намерения, когда приложение уже запущено?

+0

try android: launchMode = "singleInstance" – ask4solutions

+0

Я пробовал, но он не работает :( – Ksenia

ответ

0

Вы можете зарегистрировать все свои действия для системы диспетчеризации переднего плана. Это позволяет получать все ваши действия, а затем отбрасывать/игнорировать все события обнаружения NFC.

Для этого вы зарегистрируете свою деятельность с помощью системы диспетчеризации переднего плана NFC, используя метод NFC-адаптера enableForegroundDispatch(). Это дает вашему текущему приоритету работу при получении событий NFC над всеми другими фильтрами намерений. См. Advanced NFC: Using the NFC Foreground Dispatch System о том, как сделать эту регистрацию.

Как только вы зарегистрировались для системы отправки на переднем плане, ваша деятельность получит все NFC-намерения в своем методе onNewIntent() (или в качестве ожидающего результата намерения в зависимости от того, как вы регистрируетесь). Там вы можете просто игнорировать эти события.

Также обратите внимание, что вы обычно делаете не хотите зарегистрироваться на TAG_DISCOVERED в вашем AndroidManifest.xml. TAG_DISCOVERED означает только резервный механизм, который запускается только в том случае, если ни одно другое приложение не зарегистрировано для определенного тега. Вместо этого вы должны попробовать использовать либо NDEF_DISCOVERED (если ваш тег содержит структурированные данные NDEF), либо TECH_DISCOVERED (для регистрации технологий конкретных меток).

+0

Спасибо, я предположил, что это можно сделать таким образом, но надеялся, что есть способ сделать это в более (не в каждом действии, но может быть в файле AndroidManifest). – Ksenia

+0

Нет, каждое действие должно указывать (во время выполнения), что он будет уделять особое внимание событиям NFC (дескриптор/падение), в противном случае Android выполнит общесистемный вариант по умолчанию обработка событий NFC (отправка любых видов деятельности для типов данных/типов технологий). –

Смежные вопросы