由于我更改了NFC前台调度注册以使用TECH_DISCOVERED
意图过滤器,因此我不得不在多个应用程序之间进行选择以处理NFC标记。有没有办法在发现标签时直接在我的应用中接收NFC意图?
public static void setupForegroundDispatch(final Activity activity, NfcAdapter adapter) {
final Intent intent = new Intent(activity.getApplicationContext(), activity.getClass());
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
IntentFilter[] mFilters = new IntentFilter[] {
ndef
};
final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0);
adapter.enableForegroundDispatch(activity, pendingIntent, mFilters, null);
}
public static void stopForegroundDispatch(final Activity activity, NfcAdapter adapter) {
adapter.disableForegroundDispatch(activity);
}
答案 0 :(得分:4)
TECH_DISCOVERED
意图过滤器需要技术列表。因此,您当前的前台调度注册根本不会监听任何标记技术。
当您通过清单注册该意图过滤器时,您将使用
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tag_filter" />
这样做。同样,当您使用enableForegroundDispatch()
方法注册前台调度时,需要在enableForegroundDispatch()
的最后一个参数中指定tech-list(字符串数组的数组)。例如。要听取所有可能的标签技术(即NFC-A或NFC-B或NFC-F或NFC-V或NFC条形码),您可以使用:
IntentFilter[] filters = new IntentFilter[] {
new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED),
};
String[][] techList = new String[][] {
new String[] { NfcA.class.getName() },
new String[] { NfcB.class.getName() },
new String[] { NfcF.class.getName() },
new String[] { NfcV.class.getName() },
new String[] { NfcBarcode.class.getName() },
};
adapter.enableForegroundDispatch(activity, pendingIntent, filters, techList);
请注意,如果您想通过前台调度系统过滤任何标记,您还可以简单地使用catch-all前台调度:
adapter.enableForegroundDispatch(activity, pendingIntent, null, null);
但是,请注意,在这种情况下,TAG_DISCOVERED
意图会传递给您的应用。