Mad*_*bar 2 android android-permissions android-6.0-marshmallow
我正在SDK版本23中开发我的项目,其中新引入了应用程序权限.在某些指导原则中,他们使用以下代码来读取电话状态权限是否被授予
if (ContextCompat.checkSelfPermission(serviceContext, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
//Read Phone state
}else{
}
Run Code Online (Sandbox Code Playgroud)
但我直接访问checkSelfPermission
如下
if(serviceContext.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
//Read Phone state
}else{
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.我的问题是上面这些代码之间的区别是什么?.这是检查是否授予许可的正确方法?
我的问题是上面这些代码之间有什么区别?
无,在API 23(+)设备上.
但是,运行旧版Android的设备会在您尝试context.checkSelfPermission()
直接调用时生成错误.这种方法直到API 23才可用.
ContextCompat
提供了一种向后兼容的方式来运行checkSelfPermission()
旧的API.如果您查看实现,您将看到它通过简单地checkPermission()
使用应用程序自己的流程参数委派调用来实现此目的.checkPermission()
自第一个API发布以来就已经可用,因此可以全面使用.
public static int checkSelfPermission(@NonNull Context context, @NonNull String permission) {
if (permission == null) {
throw new IllegalArgumentException("permission is null");
}
return context.checkPermission(permission, android.os.Process.myPid(), Process.myUid());
}
Run Code Online (Sandbox Code Playgroud)
检查是否授予许可的正确方法是什么?
所以,回答这个问题:如果你只支持运行Android'Marshmallow'6.0及更新版本的设备,那么你可以使用任何一种方法.但是,由于您更有可能想要支持某些旧版Android,请使用ContextCompat
.
归档时间: |
|
查看次数: |
15045 次 |
最近记录: |