targetSdkVersion 23以下6.0中调用checkSelfPermission的问题
-
If your application is targeting an API level before 23 (Android M) then both:ContextCompat#checkSelfPermission and Context#checkSelfPermission doesn't work and always returns 0 (PERMISSION_GRANTED). Even if you run the application on Android 6.0 (API 23).
-
It's not fully true that if you targeting an API level before 23 then you don't have to take care of permissions. If you targeting an API level before 23 then:
-
Android < 6.0: Everything will be ok.
-
Android 6.0: Application's run-time permissions will be granted by default (compatibility mode applies), but the user can change run-time permissions in Android Settings, then you may have a problem.
-
-
As I said in the 1st point, if you targeting an API level before 23 on Android 6.0 thenContextCompat#checkSelfPermission and Context#checkSelfPermission doesn't work. Fortunately you can use PermissionChecker#checkSelfPermission to check run-time permissions.
Example code:
public boolean selfPermissionGranted(String permission) { // For Android < Android M, self permissions are always granted. boolean result = true; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (targetSdkVersion >= Build.VERSION_CODES.M) { // targetSdkVersion >= Android M, we can // use Context#checkSelfPermission result = context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED; } else { // targetSdkVersion < Android M, we have to use PermissionChecker result = PermissionChecker.checkSelfPermission(context, permission) == PermissionChecker.PERMISSION_GRANTED; } } return result; }
In order to obtain target Sdk Version you can use:
try { final PackageInfo info = context.getPackageManager().getPackageInfo( context.getPackageName(), 0); targetSdkVersion = info.applicationInfo.targetSdkVersion; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }
It works on Nexus 5 with Android M.
- 分类:A
更多相关文章
- Android之Menu菜单 onCreateOptionsMenu使用Menu按键显示不了问
- Android(安卓)Java方法链起来!链式调用方法、仿Builder 等。
- android 9.0 在rk3326平台上hidl的使用
- Android(安卓)调用系统相机拍照的返回结果
- android 分享功能
- android学习小结3
- 卡联系人IccProvider
- Android(安卓)AsyncTask
- Android调用Jni,非常简单的一个Demo