动态权限申请
sdk 中实现方法:
public final void requestPermissions(@NonNull String[] permissions,intrequestCode) {
if(mHasCurrentPermissionsRequest) {
Log.w(TAG,"Can reqeust only one set of permissions at a time");
// Dispatch the callback with empty arrays which means a cancellation.
onRequestPermissionsResult(requestCode,newString[0],new int[0]);
return;
}
Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions);
startActivityForResult(REQUEST_PERMISSIONS_WHO_PREFIX, intent, requestCode,null);
mHasCurrentPermissionsRequest=true;
}
1.调用activity requestPermissions 参数是 一个权限数组 和一个请求标示(new String(){android.Manifest.permission},int requestCode) 例如:requestPermissions(newString[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
2.在activity 中 复写 activity 的 onRequestPermissionsResult 方法 例如:
@Override
public voidonRequestPermissionsResult(intrequestCode,@NonNullString[] permissions,@NonNullint[] grantResults) {
switch(requestCode){
case1:
if(grantResults.length>0&&grantResults[0]== PackageManager.PERMISSION_GRANTED){
//用户同意授权
//todo
}else{
//用户拒绝授权
}
break;
}
}
2.WRITE_EXTERNAL_STORAGE : 向sd卡设备写入数据权限
1.内置存储中写入数据:
getFileDir getCacheDir
不需要WRITE_EXTERNAL_STORAGE权限
2.内置sd卡中存储数据:
getExternalFilesDir getExternalCacheDir
api<19 需要 权限 api>19 不需要权限
3.sd卡不是app 私有目录下:
getExternalStorageDirectory 需要权限
3. 小米中测试 在清单文件中 申请了WRITE_EXTERNAL_STORAGE 权限
即可在程序中去写入文件, 观察app权限配置如下图。显示app已经具有读写手机存储的权限。 然而在模拟机上需要去动态申请权限,
4.华为手机中也是如此 同样 只在清单文件中配置 权限即可。
网友评论