Android Studio请求权限,即使它是在android清单中给出的

时间:2015-11-10 09:22:01

标签: android permissions

我的Android清单看起来像这样:

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

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

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

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

</manifest>

当我尝试使用Android Manifest中的权限时:

    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
    Location location = locationManager.getLastKnownLocation(provider);

它会告诉我,我需要像这样进行权限检查:

if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    public void requestPermissions(@NonNull String[] permissions, int requestCode)
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for Activity#requestPermissions for more details.
            return;
        }

我认为这很奇怪,因为我的Android清单已经允许我这样做..我做错了吗?

我在位置编辑Android清单:

Stilla /应用/ SRC /主/ AndroidManifest.xml中

我做错了什么?

2 个答案:

答案 0 :(得分:0)

如果您使用的是Android 6.0,则必须检查您是否在应用生命周期的任何给定点拥有特定权限。这是因为用户可以随时撤销任何单一权限,并且您的应用通知此撤销权限。

因此,在使用任何需要权限的API之前,您应该使用已发布的代码段来检查是否有。即使您在清单中拥有该权限,也是如此。 看看developer article

答案 1 :(得分:0)

使用Android Marshmallow,权限系统已更改。需要在运行时请求某些权限。 ACCESS_FINE_LOCATION就是其中之一。请参阅Requesting Permissions at Run Time