建站是什么意思,在线观看网址最新电影,先进网站建设流程,网站流量指数问题出现 尝试将拍摄的图像存储至手机自定义的存储空间#xff0c;不料却一直报错#xff0c;主要问题是在使用 FileProvider 从文件路径中获取 Uri 时出现异常。 相关代码
报错区域的文件路径相关的代码 主要是在 File imageDir new File(getExternalCacheDir(), “Galler…问题出现 尝试将拍摄的图像存储至手机自定义的存储空间不料却一直报错主要问题是在使用 FileProvider 从文件路径中获取 Uri 时出现异常。 相关代码
报错区域的文件路径相关的代码 主要是在 File imageDir new File(getExternalCacheDir(), “Gallery”);过程中getExternalCacheDir()报了此异常。
File imageDir new File(getExternalCacheDir(), Gallery);if (!imageDir.exists()) {imageDir.mkdir();}mPhotoFile new File(imageDir,output_image.jpg);if(mPhotoFile.exists()){mPhotoFile.delete();}try {mPhotoFile.createNewFile();} catch (IOException e) {e.printStackTrace();}if(Build.VERSION.SDK_INT Build.VERSION_CODES.N) {mImageUri FileProvider.getUriForFile(CameraActivity.this, getPackageName() .fileprovider, mPhotoFile);} else {mImageUri Uri.fromFile(mPhotoFile);}在AndroidManifest.xml配置FileProvider 其中 ${applicationId} 为 项目的包名com.example.app , 具体值可以在项目模块文件夹中的 build.gradle 中找到 xml/file_paths为项目路径下 res/xml/file_paths.xmlfile_paths为文件名
provider
android:nameandroid.support.v4.content.FileProvider
android:authorities${applicationId}.fileproviderandroid:exportedfalseandroid:grantUriPermissionstruemeta-dataandroid:nameandroid.support.FILE_PROVIDER_PATHSandroid:resourcexml/file_paths /
/providerfile_paths.xml内容如下 其中每个子标签中的 name 指的子文件夹名字path 指路径
?xml version1.0 encodingutf-8?
paths xmlns:androidhttp://schemas.android.com/apk/res/androidexternal-files-path nameexternal pathpath /
!--代表app外部缓存区域的根目录与Context.getExternalCacheDir()获取的路径对应。--external-cache-path nameGallery pathAndroid/data/com.example.app/files /
/paths问题原因分析 结合上述java代码中FileProvider.getUriForFile的具体实现发现其对应的文件夹路径为getExternalCacheDir()/path/name所以下面情况会形成getExternalCacheDir()/Android/data/com.example.app/files/Gallery 这个路径明显与File imageDir new File(getExternalCacheDir(), “Gallery”); 不符合所以会报异常 问题解决
其实最本质的出错是在 file_paths.xml 的配置上把其中的 external-cache-path 改为下面的情况问题即解决。即path ‘.’ 表示当前路径该路径即为Context.getExternalCacheDir()获取的路径下建立BEGallery子文件夹path不用进行重新指定其他路径。
external-cache-path nameGallery path. /如果您就想在 path中指定路径则需要更改代码中的 imageDir.mkdir(); 将这个创建单个文件夹改为 imageDir.mkdirs(); 即创建多层文件夹也可以解决此问题。