intent.getAction() 在 NFC 标签扫描期间在 onNewIntent() 内为空
intent.getAction() is null inside onNewIntent() during NFC tag scan
这是我第一次使用 NFC 标签。我在清单中声明了 NFC 扫描 activity:
<activity
android:name=".main.NFCScanActivity"
android:theme="@android:style/Theme.Holo.Light"
android:launchMode="singleTop"
android:exported="true">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
这是 nfc_tech_filter.xml 文件:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.NfcB</tech>
<tech>android.nfc.tech.NfcF</tech>
<tech>android.nfc.tech.NfcV</tech>
<tech>android.nfc.tech.Ndef</tech>
<tech>android.nfc.tech.NdefFormatable</tech>
<tech>android.nfc.tech.MifareClassic</tech>
<tech>android.nfc.tech.MifareUltralight</tech>
</tech-list>
每当我扫描我的标签时,都会调用 onNewIntent(),但是当我尝试在 onNewIntent 中调用 intent.getAction() 时,该值始终为 null。
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
private void handleIntent(Intent intent) {
String action = intent.getAction(); // action here is null
}
当您的应用程序处于前台时,如果您想处理 NFC,则使用 2 个前台 NFC API 之一更为正常。通常 Manifest NFC 条目仅用于通过 NFC 触发器启动您的应用程序。
enableReaderMode
是 2 个前景 NFC Api 中更好和更新的,或者是更旧的 enableForegroundDispatch
使用示例
如果为 NFC 使用清单条目,您应该真正处理 onCreate
中的 Activity 的 getIntent
的 return,以查看它是否是从NFC 触发器。
这是我第一次使用 NFC 标签。我在清单中声明了 NFC 扫描 activity:
<activity
android:name=".main.NFCScanActivity"
android:theme="@android:style/Theme.Holo.Light"
android:launchMode="singleTop"
android:exported="true">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
这是 nfc_tech_filter.xml 文件:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.IsoDep</tech>
<tech>android.nfc.tech.NfcA</tech>
<tech>android.nfc.tech.NfcB</tech>
<tech>android.nfc.tech.NfcF</tech>
<tech>android.nfc.tech.NfcV</tech>
<tech>android.nfc.tech.Ndef</tech>
<tech>android.nfc.tech.NdefFormatable</tech>
<tech>android.nfc.tech.MifareClassic</tech>
<tech>android.nfc.tech.MifareUltralight</tech>
</tech-list>
每当我扫描我的标签时,都会调用 onNewIntent(),但是当我尝试在 onNewIntent 中调用 intent.getAction() 时,该值始终为 null。
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
private void handleIntent(Intent intent) {
String action = intent.getAction(); // action here is null
}
当您的应用程序处于前台时,如果您想处理 NFC,则使用 2 个前台 NFC API 之一更为正常。通常 Manifest NFC 条目仅用于通过 NFC 触发器启动您的应用程序。
enableReaderMode
是 2 个前景 NFC Api 中更好和更新的,或者是更旧的 enableForegroundDispatch
使用示例
如果为 NFC 使用清单条目,您应该真正处理 onCreate
中的 Activity 的 getIntent
的 return,以查看它是否是从NFC 触发器。