Android NFC默认应用问题:启动器未显示及仅响应URL标签
解决你的NFC应用问题
嘿,我来帮你搞定这两个NFC相关的问题!咱们逐个分析解决:
问题1:应用未在启动器列表显示
你的代码里犯了一个常见错误——把MAIN/LAUNCHER的启动意图和NDEF_DISCOVERED的NFC意图放在了**同一个<intent-filter>**里。Android的意图过滤器是“与”逻辑,系统找不到同时满足这两类条件的触发场景,所以启动器就不会显示你的应用。
解决方法很简单:把这两组意图拆分成两个独立的<intent-filter>,这样启动器能识别到MAIN/LAUNCHER,NFC触发也能正常响应。
问题2:仅在URL类型NFC标签时打开应用
你当前的意图过滤器用了<data android:mimeType="text/plain" />,这会响应所有文本类型的NDEF标签。而URL类型的NFC标签通常存储的是Uri格式的NDEF记录,对应的系统意图会携带http/https这类Scheme的Data。
我们需要修改<intent-filter>里的<data>配置,只匹配URL相关的Scheme,这样应用就只会在扫描到URL标签时被唤起。
修改后的完整代码
<uses-permission android:name="android.permission.NFC" /> <uses-feature android:name="android.hardware.nfc" android:required="true" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <!-- 启动器入口的意图过滤器 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- 仅响应URL类型NDEF标签的意图过滤器 --> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <!-- 匹配http和https开头的URL标签 --> <data android:scheme="http" /> <data android:scheme="https" /> </intent-filter> <!-- 保留TECH_DISCOVERED的元数据(如果需要的话) --> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" /> </activity> </application>
额外说明
- 如果你的URL标签使用了其他Scheme(比如
ftp、mailto),可以在<intent-filter>里添加对应的<data android:scheme="xxx" />。 - 拆分意图过滤器后,启动器会正常显示你的应用,同时只有扫描到URL类型的NFC标签时,系统才会唤起你的应用。
内容的提问来源于stack exchange,提问作者Dim
相关产品推荐
相关产品推荐

