【问题标题】:SecurityException NFC permission requiredSecurityException 需要 NFC 权限
【发布时间】:2014-09-15 11:47:10
【问题描述】:

我一直在 android 上做一些 NFC 开发,但我碰壁了。我启动了该应用程序,但它立即失败并显示“不幸的是,.....已停止工作”。

一些快速的谷歌搜索表明我需要将权限放入清单中。我这样做了,但是你瞧,我仍然得到同样的错误!

这是我的清单的开始:

<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.

我在这里做错了什么?

【问题讨论】:

  • 我认为您必须在应用程序标签之外的 Manifest 顶部声明使用权限。

标签: android permissions nfc


【解决方案1】:

部分

<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

【讨论】:

    【解决方案2】:

    &lt;uses-permission&gt;&lt;uses-sdk&gt;&lt;uses-feature&gt; 转到 &lt;application&gt; 元素之外:

    <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

    【讨论】:

      【解决方案3】:

      将这些添加到您使用 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>
      

      而且你必须在应用标签之前定义权限。

      【讨论】:

      • 有几个 cmets, Opiatefuchs 在 cmets 中排名第一,其次是 Burak。因为我只能投票 cmets 并接受答案。我接受这个。不过其他的都是正确的。
      • @Gerrie 我不明白你对此接受的澄清??你能说清楚吗??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 2020-03-31
      • 2017-01-06
      • 2011-10-15
      • 2012-12-14
      • 2020-01-25
      • 2013-01-01
      相关资源
      最近更新 更多