Android8.0 文件的存储权限

首先Android6.0之后都是需要动态申请权限的,注意在AndroidManifest.xml中也是和以前一样需要些权限的;

前段时间在做上传头像的时候,拍照再对图片进行裁剪的时候遇到的Android8.0的手机会失败,上网查找里一下原来是Android8.0以后的权限又加了限制条件。我总结了一下:

首先要在res的文件夹下建立一个xml的文件夹,再建立一个provider_paths.xml,如图所示:


provider_path.xm的内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external" path="."/>
</paths>
然后在AndroidManifest.xml中配置信息:
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="包名"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths" />
</provider>
再点击拍照的时候判断一下
File file = new File(Environment
        .getExternalStorageDirectory(), "image.jpg");
if(Build.VERSION.SDK_INT>=24) { //判读版本是否在7.0以上
 //参数1 上下文, 参数2 Provider主机地址 和配置文件中保持一致   参数3  共享的文件
tempUri =FileProvider.getUriForFile(context, "包名", file);
//添加这一句表示对目标应用临时授权该Uri所代表的文件

}else{

    tempUri = Uri.fromFile(file);
}
动态申请权限
 
 
if (ContextCompat.checkSelfPermission(context,Manifest.permission.CAMERA)
!= PackageManager. PERMISSION_GRANTED) { ActivityCompat. requestPermissions( this, new String[]{Manifest.permission. CAMERA },
1000);} else { //不需要申请动态权限时候的操作}动态申请权限的回调
 
 
@Override
public void onRequestPermissionsResult
(int requestCode, String[] permissions, int[] grantResults){

    if (requestCode == 1000)
    {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
        {
            //同意申请权限
        } else
        {
            // 用户拒绝申请权限
            Toast.makeText(context,"请同意调起相机权限", Toast.LENGTH_SHORT).show();
        }
        return;
    }
  
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}



猜你喜欢

转载自blog.csdn.net/u010256329/article/details/79895718