用户和当前进程都没有android.permission.ACCESS_COARSE_LOCATION

时间:2014-10-11 08:38:36

标签: android android-manifest android-permissions

我知道这可能是一个愚蠢的问题,我之前提到了所有类似的问题,但不幸的是我可以解决这个问题。很可能是我的Manifest.xml文件中存在问题。

当我尝试访问位置时,应用程序崩溃

这是我的manifest.xml

<?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.tt.test" >

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".sTest"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>


    </activity>
    <service android:name="com.test.tt.test.sService">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter> </service>
    <service android:name="com.test.tt.test.sServiceRequest" />

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />


</application>

当我运行它时抛出此错误

 java.lang.SecurityException: Neither user 11029 nor current process has android.permission.ACCESS_COARSE_LOCATION.

与其他权限类似。我在清单文件中看不到任何错误。帮助赞赏

5 个答案:

答案 0 :(得分:14)

如果您在Android Marshmallow及以上设备上运行:

如果设备运行的是Android 6.0或更高版本,并且应用的目标SDK是23或更高,则应用程序不仅必须列出清单中的权限,还必须在应用程序运行时请求其所需的每个危险权限。

更多信息:

http://developer.android.com/training/permissions/requesting.html

http://developer.android.com/guide/topics/security/permissions.html#normal-dangerous

答案 1 :(得分:12)

这意味着您的清单文件中包含一些错误的信息或格式错误的信息,这就是您的应用无法识别您的权限的原因。只需确保已使用任何格式错误的数据清理ANDROIDMANIFEST文件。

它可以工作,所有权限都应该在Application标签

之外

答案 2 :(得分:3)

在manifest标记

下方移动uses-permission外部应用程序

答案 3 :(得分:3)

移动权限部分用&#34解决了我的问题;用户或当前进程都没有android.permission.READ_PHONE_STATE&#34;。非常感谢这个论坛的每个人。 关于其他人,我的更改如下:

<强>原始

{group-id}

更改:

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


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

    <activity android:name=".NfcRead"></activity>
</application>

答案 4 :(得分:0)

此异常与Android 6及更高版本中的运行时权限系统有关。位置许可属于危险许可[check here],因此您必须满足以下2个最低要求才能处理这些许可:

  1. 在清单中声明以下2个权限(这些权限必须在应用程序标签之外)

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION " />
    
  2. 使用 checkSelfPermission() 在运行时检查授予的权限,并使用 requestPermissions() strong>(如果尚未授予)。

如果您已经完成上述两项操作,但仍然出现错误,请检查以下内容:

  1. 您应用程序的 targetSdkVersion (应为== 23)[如果应用程序的targetSdkVersion设置为小于23。将假定该应用程序尚未通过新的许可系统进行测试,并将切换到相同的旧行为:用户必须在安装时接受每一个权限,安装后将被全部授予]。
  2. 检查清单文件是否有问题。您的清单文件格式可能不正确。
  3. 在用户接受/撤销运行时位置权限对话框之前,检查是否正在调用对位置数据起作用的任何函数?
  4. 清理您的应用程序(清理构建)并重新运行。

希望这会有所帮助:-)