2016-12-02 47 views
0

我有一个应用程序,其targetSDKversion为21(不能向上移动21以上)。当目标API小于棉花糖时测试棉花糖上的应用程序级别许可

它使用位置服务,但我已经能够测试以确保系统级别的位置权限已启用,但在安装了6.0的设备上,您可以关闭应用程序级别的位置权限。我无法确定是否已启用此级别的权限。

我正在调用下面:

locationMode = Settings.Secure.getInt(activity.getContentResolver(), 
    Settings.Secure.LOCATION_MODE); 
returnVal = (locationMode != Settings.Secure.LOCATION_MODE_OFF); 

由于locationMode是3(即它已经启用),即使在应用程序级的位置已被禁用它返回真值。

很多,我一直在寻找的线不在API 21提供的所有使用API​​调用引用的(我们只是不能去还。)

谁能给我的东西,我可以检查较新的设备以查看是否启用了应用程序级权限,但仍然能够以targetSDKVersion为21进行此测试。在执行此测试之前,我将测试Build.VERSION> 23。或者这甚至有可能?

+2

I * *认为是['PermissionChecker'(https://developer.android.com/reference/android/support/v4/content/PermissionChecker.html)将覆盖此方案。话虽这么说,但我更关注于这一点,并且更多地关注为了让你能够提升你的'targetSdkVersion'所需的代码更改。 – CommonsWare

+0

无法在我的环境中解析.content.PermissionChecker。我假设在目标SDKVersion为22或23之前它不可用?我很想升级到一个更新的API,但这是一个银行应用程序,我们无法将其移动到获得批准和资助后才能这样做,因为这是删除较旧库的一些工作,它目前正在使用API​​ 23上的失败。 – Mike

+0

'PermissionChecker'是Android支持库的一部分(例如'support-v4')。 – CommonsWare

回答

0

您可以使用它来查看应用程序级权限是打开还是关闭。它也基于API级别进行检查,因此可以安全地在所有设备上使用。

boolean hasApplicationLevelLocationPermission(Context context) { 
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; 
} 
+0

我无法使ActivityCompat.checkSelfPermission()正常工作。它得到错误,它无法解决它。我已经包含导入android.support.v4.app.ActivityCompat。 – Mike

+0

您是否已将v4支持库添加为Gradle依赖项? –

+0

我有:在我的Gradle中编译'com.android.support:support-v4:21.0.3'。 – Mike