2016-07-02 80 views
2

从Android 6.0(API级别23)开始,我们可以在运行时询问权限。但是,根据文档,所有权限仍然需要在AndroidManifest.xml中定义,因此在低于23的API中,这些权限将在安装该应用程序之前被授予。基于API级别的请求权限

我只希望在运行时请求ACCESS_FINE_LOCATION权限 - 因为这是一个敏感权限,所以在安装之前请求它没有任何上下文会导致下载量下降。

我针对的是API级别11+的应用程序,所以我想知道是否有可能不要求旧版API中的ACCESS_FINE_LOCATION权限(即,未在AndroidManifest中为23以上的API列出),并且只请求它为API 23 +。

更新

为了澄清,我想知道是否可以做到以下几点:

AndroidManifest.xml中

IF API_LEVEL>=23: { 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
} 
ELSE: 
{ 
} 
+0

在运行时,您可以通过版本把权限检查,如果版本> = 23比检查运行时权限,否则什么都不做....... –

+0

@ Er.Arjunsaini,我不需要在AndroidManifest.xml中静态列出这个权限吗? – Ohad

+0

“在所有版本的Android上,您的应用程序需要在其应用程序清单中声明正常和危险的权限,如声明权限中所述。“ – Ohad

回答

2
  • 不能请求权限不是宣布在清单
  • 不能更改您的清单在运行时。

你可以做的就是让1味道瞄准API 23+许可申报和另有一番风味未经许可针对API 23-

-1

没有那是不可能的AndroidManifest .xml

您可以在使用基于该权限的功能之前询问权限。

​​

现在覆盖onRequestPermissionsResult()方法,以查看是否允许用户请求或不

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 

      if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission is granted, Now you can execute function 

      } else { 

       // permission denied, Don't execute your function to avoid any crashes 

      } 
      return; 

} 

你不必检查这里 SDK版本以获取更多信息click here 编码愉快:)

5

我认为你可以使用这样做:

<uses-permission-sdk-23 android:name="string" android:maxSdkVersion="integer" /> 

你可以阅读更多关于它的官方文档中:uses-permission-sdk-23