SecurityException需要NFC权限

时间:2014-09-15 11:47:10

标签: android permissions nfc

我一直在Android上进行一些NFC开发,而且我已经碰壁了。我启动了应用程序,它立即失败了#34;不幸的是,.....已停止工作"。

一些快速的谷歌搜索显示我需要在清单中放置权限。我做到了,但是,我仍然得到同样的错误!

这是我的清单的开头:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <uses-permission android:name="android.permission.NFC" />
    <uses-sdk android:minSdkVersion="10"/>
    <uses-feature android:name="android.hardware.nfc" android:required="true" />

    <activity
        android:name=".MainActivity"
    <!-- rest of the file --->

logcat中的输出:

java.lang.RuntimeException: Unable to resume activity {za.co.fnb.ms.nfcreader/za.co.fnb.ms.nfcreader.MainActivity}: java.lang.SecurityException: NFC permission required: Neither user 10253 nor current process has android.permission.NFC.

我在这里做错了什么?

3 个答案:

答案 0 :(得分:2)

部分

<uses-permission android:name="android.permission.NFC" />
    <uses-sdk android:minSdkVersion="10"/>
    <uses-feature android:name="android.hardware.nfc" android:required="true" />

需要在应用程序代码之外。


喜欢

<uses-permission android:name="android.permission.NFC" />
<uses-sdk android:minSdkVersion="10"/>
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
...

阅读Structure of the Manifest File

答案 1 :(得分:1)

<uses-permission><uses-sdk><uses-feature> <application>元素:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.commonsware.android.jimmyb"
    android:versionCode="1"
    android:versionName="1.0">

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

    <uses-feature
        android:name="android.hardware.nfc"
        android:required="true"/>

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="15"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter android:label="@string/app_name">
                <action android:name="android.nfc.action.NDEF_DISCOVERED"/>

                <data android:mimeType="vnd.secret/agent.man"/>

                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

(来自this sample project

答案 2 :(得分:0)

将这些添加到您使用nfc:

的活动中
    <activity
        android:name="com.example.example.CLASSNAME"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar">

        <intent-filter>
            <action android:name="android.nfc.action.TAG_DISCOVERED"/>
        </intent-filter>

        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED"/>  
            <data android:mimeType="mime/type" />
        </intent-filter>

        <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
            android:resource="@xml/nfc_type"/>   

    </activity>

此外,您还必须在应用程序标记之前定义权限。