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 可公开访问,因此您需要考虑到这一点。
我正在为我的 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 可公开访问,因此您需要考虑到这一点。