在gradle中指定applicationId,这里也会跟着变了AdroidManifest.xml
android:authorities="${applicationId}.fileProvider"
<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="${applicationId}.FileProvider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid: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/
拍照:
//创建图片存放fileFile imgFile = new File("照片存放目录");Uri uri;//根据当前系统版本决定使用哪个api,N是Android7.0的代号if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//第一个参数是上下文,第二个参数来自清单文件,必须完全一样,第三个参数为上面创建的照片fileuri = FileProvider.getUriForFile(this, "${applicationId}.FileProvider", imgFile);} else {//Android7.0还用原先的apiuri = Uri.fromFile(imgFile);}//设置拍照后保存目录intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
应用安装
//创建安装包fileFile 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还用原先的apiuri = 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);