Похоже, что решение Динеша должно работать, но если оно доставляет вам проблемы, вы можете попробовать альтернативное (более сложное) решение. Вы можете использовать метод NfcAdapter.enableForegroundDispatch()
, чтобы взять под контроль действие android.nfc.action.TECH_DISCOVERED
внутри своей деятельности и убедиться, что оно ничего не делает.
Вы можете сделать это, добавив следующие два метода к вашему MainActivity
(или добавив код к уже существующим):
@Override
protected void onResume() {
super.onResume();
//create a broadcast intent that doesn't trigger anything
Intent localIntent = new Intent("fake.action");
localIntent.setPackage(getApplicationContext().getPackageName());
localIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
//set the NFC adapter to trigger our broadcast intent
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcAdapter.enableForegroundDispatch(
this,
PendingIntent.getBroadcast(this, 0, localIntent, PendingIntent.FLAG_UPDATE_CURRENT),
new IntentFilter[] {new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED)},
new String[][] { { "android.nfc.tech.IsoDep" /* add other tag types as necessary */ } });
}
@Override
protected void onPause() {
super.onPause();
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
nfcAdapter.disableForegroundDispatch(this);
}
Теперь, когда ваша активность видна и обнаружен тег NFC, никакие действия не будут инициированы. (Или, более конкретно, он инициирует широковещательную рассылку, для которой не зарегистрирован ни один метод.)
Надеюсь, это поможет.