FileProvider适配问题
2018-05-14 本文已影响0人
二十三岁的梦
在app的build.gradle文件下添加applicationId
defaultConfig {
applicationId "你的包名"
...
}
在资源文件夹res下新建xml文件夹,并在xml文件夹新建file_paths.xml,文件内容如下
<?xml version="1.0" encoding="utf-8"?>
<paths>
<!-- 需要临时授权访问的路径(.代表所有路径) -->
<!--对应Environment.getExternalStorageDirectory()-->
<external-path name="storPath" path=""/>
<!--对应Context.getExternalCacheDir()得到的目录-->
<!-- 此标签需要 support 25.0.0以上才可以使用-->
<external-cache-path name="cachePath" path=""/>
<!--对应Context#getExternalFilesDir(String) Context.getExternalFilesDir(null)-->
<external-files-path name="filePath" path="aplus_app"/>
<!--对应 getCacheDir()得到的目录-->
<cache-path name="cacheDir" path=""/>
<!--对应Context.getFilesDir() 目录-->
<files-path name="filesDir" path=""/>
<!-- root-path 手机存储根目录 -->
<root-path name="rootPath" path=""/>
</paths>
name:名称标志字符串,不可以同名!
path:文件夹“相对路径”,完整路径取决于当前的标签类型。
标签 | 路径 |
---|---|
…….. | * 代表 当前文件夹及其子文件夹 |
file-path | 物理路径为Context.getFilesDir() + /path/* |
cache-path | 物理路径为Context.getCacheDir() + /path/* |
external-path | 物理路径为Environment.getExternalStorageDirectory() + /path/* |
external-files-path | 物理路径为Context.getExternalFilesDir(String) + /path/* |
external-cache-path | 物理路径为Context.getExternalCacheDir() + /path/* |
root-path | 物理路径相当于 /path/* |
AndroidManifest.xml添加如下代码
<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/file_paths" />
</provider>
举个例子:当使用系统相机时
File outFile = new File(outDir, System.currentTimeMillis() + ".jpg");
// 把文件地址转换成Uri格式
Uri uri = null;
if (Build.VERSION.SDK_INT >= 24) {
uri = FileProvider.getUriForFile(getApplicationContext(), "你的包名.fileprovider", outFile);
} else {
uri = Uri.fromFile(outFile);
}
//LogUtils.d("AbsolutePath", "getAbsolutePath=" + outFile.getAbsolutePath());
// 设置系统相机拍摄照片完成后图片文件的存放地址
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
// 此值在最低质量最小文件尺寸时是0,在最高质量最大文件尺寸时是1
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
startActivityForResult(intent, Config.FOR_CAMERA_PIC);
最后不要忘记权限AndroidManifest.xml
<!-- 允许程序设置内置sd卡的写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 允许程序设置内置sd卡的读权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />