Android NFC 扫描仪问题

Android NFC scanner issue

我正在为我的 Android 应用程序开发 NFC 扫描功能。它适用于我所有的设备,除了 Samsung S4 运行 Android 4.4.2.

当我扫描 NFC tag 时,它会抛出此错误:

03-04 17:09:34.570: W/ActivityManager(820): Permission Denial: starting Intent { act=android.nfc.action.NDEF_DISCOVERED dat=vnd.android.nfc://ext/android.com:pkg cmp=com.mobile.planning/.NfcDebugActivity (has extras) } from null (pid=-1, uid=10200) not exported from uid 10202
03-04 17:09:34.570: W/ActivityManager(820): Unable to send startActivity intent
03-04 17:09:34.570: W/ActivityManager(820): java.lang.SecurityException: Permission Denial: starting Intent { act=android.nfc.action.NDEF_DISCOVERED dat=vnd.android.nfc://ext/android.com:pkg cmp=com.mobile.planning/.NfcDebugActivity (has extras) } from null (pid=-1, uid=10200) not exported from uid 10202
03-04 17:09:34.570: W/ActivityManager(820):     at com.android.server.am.ActivityStackSupervisor.startActivityLocked(ActivityStackSupervisor.java:1669)
03-04 17:09:34.570: W/ActivityManager(820):     at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:977)
03-04 17:09:34.570: W/ActivityManager(820):     at com.android.server.am.ActivityManagerService.startActivityInPackage(ActivityManagerService.java:4182)
03-04 17:09:34.570: W/ActivityManager(820):     at com.android.server.am.PendingIntentRecord.sendInner(PendingIntentRecord.java:252)
03-04 17:09:34.570: W/ActivityManager(820):     at com.android.server.am.PendingIntentRecord.send(PendingIntentRecord.java:192)
03-04 17:09:34.570: W/ActivityManager(820):     at android.content.IIntentSender$Stub.onTransact(IIntentSender.java:64)
03-04 17:09:34.570: W/ActivityManager(820):     at android.os.Binder.execTransact(Binder.java:404)
03-04 17:09:34.570: W/ActivityManager(820):     at dalvik.system.NativeStart.run(Native Method)

貌似是权限错误。这真的很奇怪,因为它确实适用于我的 LG L65 和我的 Samsung ACE 4.

在我的 Manifest.xml 中,我添加了以下几行:

<uses-permission android:name="android.permission.NFC"/>
<uses-feature android:name="android.hardware.nfc" />

Activity 已声明为:

<activity
        android:name=".NfcDebugActivity"
        android:screenOrientation="portrait"
        android:launchMode="singleTop"/>

NFC 功能已在每台设备上启用,它适用于您可以在 Play Store.

上轻松找到的应用程序

您知道为什么会触发此错误吗?

感谢您的帮助。

如错误所述,您的 activity 未导出。默认情况下,仅当 activity 具有 <intent-filter> 时才会导出该 activity,而您的没有。

现在,为什么 它需要导出,我不能说,因为我本来希望你有一些 <intent-filter> 使用 PendingIntent 作为 NFC 设置的一部分。后者允许其他进程启动您的 activity,即使它未导出。

解决方法是将 android:exported="true" 添加到清单中的 <activity> 元素。不过,这使得 activity 可公开访问,因此您需要考虑到这一点。