- 在应用系统大于等于6.0的手机上面,明明已经在AndroidManifest.xml中配置了权限,但是就是没有作用。因为Android6.0后需要动态的获取权限。就是当你需要这个权限的时候,需要手机给用户一个提示选择是否同意开启这个权限。
- 看到网上有很多关于这方面的文章看起来好像很麻烦似的,其实动态获取权限就那几行代码就可以搞定。
- 我在这里大概的初步的展示一下使用到的关键点,方便新手初步的使用与了解。(想要详细的了解的的建议阅读官方文档,不需要担心麻烦,也是比较简洁明了的)
首先需要你将你想要获取的权限在AndroidManifest配置中写出来,之后如果你手机使Android 6.0以上还需要你通过代码去动态获取,下面给出一些主要代码。
/**
* 获取权限需要调用的方法 权限一旦获取后 不需要重复获取。
*/
public boolean getPression() {
//当版本为Android6.0以上才需要考虑的问题
//首先判断手机的SDK版本是否大于等于23,如果小于的话就不需要动态的去申请权限,让用户有更好的体验。
if (Build.VERSION.SDK_INT >= 23) {
//设置你所需要检查是否开启的权限
int checkPermission =
ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
/* // Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.READ_CONTACTS)) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
*/
//判断权限是否获取
if (checkPermission != PackageManager.PERMISSION_GRANTED) {
ToastUtils.showShort(getApplicationContext(), getString(R.string.pression_tip));
//申请需要的权限 这里为读取写入 与相机
ActivityCompat.requestPermissions(this,
new String[]
{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS,
Manifest.permission.CAMERA}, 1);
//这个地方的一为onRequestPermissionsResult中
//会显示的requestCode请求码 可以用于判断
return false;
} else {
return true;
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//申请动态获取权限之后回有一个回调的方法,如果用户同意的话,
// 就执行下一步的方法。在这里需要强调的是这个回调是异步的执行的下一步的方法一定要写在获取权限成功的逻辑里面,
//不然会调用与代码不同步
}
进一步想要了解的朋友可以去http://blog.csdn.net/lmj623565791/article/details/50709663。 个人认为讲解的比较详细。