Android6.0的权限分为普通权限和危险权限,其中普通权限还是可以和以前一样,通过在AndroidManifest.xml中赋予,比如:
<uses-permission android:name="android.permission.INTERNET"/>
所以我们重点说一下危险权限,危险权限包括这些:
![危险权限](https://img-blog.csdn.net/20161015220613192)
你在使用的时候就可以看看,是不是用到了上述的这些权限,如果用到了,记得要动态赋予权限,不然就算在AndroidManifest.xml中声明了也没有用。
好了接下来说说,怎么动态获取权限,我用android.permission.WRITE_EXTERNAL_STORAGE来举个例子。
步骤
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
- 请求权限后,将会回调onRequestPermissionsResult
代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
//获取权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_REQUEST_CODE)
} else {
init()
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
doNext(requestCode, grantResults);
}
private void doNext(int requestCode, int[] grantResults) {
if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
init();
} else {
}
}
}