android 7.0文件读写权限配置
在gradle中指定applicationId,这里也会跟着变了AdroidManifest.xml
android:authorities=”${applicationId}.fileProvider”
<provider
android:name=”android.support.v4.content.FileProvider”
android:authorities=”${applicationId}.FileProvider”
android:exported=”false”
android:grantUriPermissions=”true”>
<meta-data
android:name=”android.support.FILE_PROVIDER_PATHS”
android:resource=”@xml/rc_file_path” />
res/xml/rc_file_path.xml 文件的名字没有要求,只要放在xml文件夹下面就可以了
<?xml version=”1.0″ encoding=”utf-8″?>
<paths>
<external-path path=”.” name=”name” />
</paths>
paths这个元素内可以包含以下一个或多个
<files-path name=”name” path=”path” />对应内部内存卡根目录:Context.getFileDir() + /path/
<cache-path name=”name” path=”path” />对应应用默认缓存根目录,物理路径相当于Context.getCacheDir() + /path/
<external-path name=”name” path=”path” />对应外部内存卡根目录,物理路径相当于Environment.getExternalStorageDirectory() + /path/
<external-files-path name=”name” path=”path” />对应外部内存卡根目录下的APP公共目录,物理路径相当于Context.getExternalFilesDir(String) + /path/
<external-cache-path name=”name” path=”path” />对应外部内存卡根目录下的APP缓存目录,物理路径相当于Context.getExternalCacheDir() + /path/
拍照:
//创建图片存放file
File imgFile = new File(“照片存放目录”);
Uri uri;
//根据当前系统版本决定使用哪个api,N是Android7.0的代号
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//*个参数是上下文,第二个参数来自清单文件,必须完全一样,第三个参数为上面创建的照片file
uri = FileProvider.getUriForFile(this, “${applicationId}.FileProvider”, imgFile);
} else {
//Android7.0还用原先的api
uri = Uri.fromFile(imgFile);
}
//设置拍照后保存目录
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
应用安装
//创建安装包file
File apkFile = new File(path);
Uri uri;
//根据当前系统版本决定使用哪个api,N是Android7.0的代号
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(context, “{applicationId}.FileProvider”, apkFile);
} else {
//Android7.0还用原先的api
uri = Uri.fromFile(apkFile);
}
//当前代码在Activity里则下面这句可省略
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//授权Intent读取URI和写URI的权限
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.setDataAndType(uri,”application/vnd.android.package-archive”);
context.startActivity(intent);