Java 忽略Android NFC mimeType,应用程序总是在与标签或光束设备接触时启动
我的应用程序有问题。它使用nfc标签进行某些操作(开门/锁门)。 应用程序在默认活动中有一个意向过滤器:Java 忽略Android NFC mimeType,应用程序总是在与标签或光束设备接触时启动,java,android,nfc,Java,Android,Nfc,我的应用程序有问题。它使用nfc标签进行某些操作(开门/锁门)。 应用程序在默认活动中有一个意向过滤器: <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" />
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/de.juwei.myapplication" />
</intent-filter>
如果标记没有我的mimetype,则getIntent()为null。因此,如果你举个例子,把智能手机放在一起,试图传送一些数据,那么这个应用程序才刚刚启动。如果我将我的sony smartwatch 3固定在手机上,活动也将开始
非常奇怪的是,如果我试图用这么简单的代码在一个新的应用程序上重现这一点,那么应用程序并不是在每个nfc命令上启动的
但在我的主应用程序中,没有更多nfc特定的方法
我完全迷路了。
有人知道如何跟踪/调试应用程序为什么会被每一条nfc数据打开吗
致以最良好的祝愿,
Juergen看来问题出在enableForegroundDispatch上。 我在onResume和onPause上注释掉了这两个调用,并将Manifest更改为android:launchMode=“singleTask”,它似乎可以工作。 一定是nfc的问题,我不知道
然而,在我的第一次测试中,它现在似乎可以工作了,应用程序并不是每次我在设备背面贴上nfc标签时都会启动。在enableForegroundDispatch方法中,您必须添加过滤器和技术列表 例如:
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndef.addDataType("*/*"); /* Handles all MIME based dispatches.
You should specify only the ones that you need. */
}
catch (MalformedMimeTypeException e) {
throw new RuntimeException("fail", e);
}
mFilters = new IntentFilter[] {
ndef,
};
mTechLists = new String[][] { new String[] { NfcF.class.getName() } };
NfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,
mTechLists);
这是越来越奇怪。。。如果我完全删除nfc的意向过滤器,应用程序也将启动!这是怎么回事?是什么导致了全球“我已经准备好接受任何nfc标签”?@Juwei有用吗?抱歉耽搁了!是的,这很有用,谢谢!
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndef.addDataType("*/*"); /* Handles all MIME based dispatches.
You should specify only the ones that you need. */
}
catch (MalformedMimeTypeException e) {
throw new RuntimeException("fail", e);
}
mFilters = new IntentFilter[] {
ndef,
};
mTechLists = new String[][] { new String[] { NfcF.class.getName() } };
NfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,
mTechLists);