Android 7.0 FileProvider 的那些坑



上一篇博客讲到拍照截图保存到本地,http://blog.csdn.net/qq_31428453/article/details/78423625 


1.Android SD卡创建文件和文件夹失败

图片无法保存到SD卡,原因是:创建文件和文件夹的方法有问题,正确示范如下

String path1 = getExternalCacheDir().getAbsolutePath();
String path2 = getExternalFilesDir(null).getAbsolutePath();
String path3 = getFilesDir().getAbsolutePath();
String path4 = getCacheDir().getAbsolutePath();
String path5 =Environment.getExternalStorageDirectory().getAbsolutePath();
String path6 =Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).getAbsolutePath();
File imagePath = new File(path2, "ee");
Log.i("getExternalCacheDir", path1);
Log.i("getExternalFilesDir", path2);
Log.i("getFilesDir", path3);
Log.i("com.getCacheDir.try", path4);
Log.i("getESDirectory", path5);
Log.i("com.example.try", path6);

11-03 13:15:36.746 24507-24507/com.example.mytry I/getExternalCacheDir: /storage/emulated/0/Android/data/com.example.mytry/cache
11-03 13:15:36.746 24507-24507/com.example.mytry I/getExternalFilesDir: /storage/emulated/0/Android/data/com.example.mytry/files
11-03 13:15:36.746 24507-24507/com.example.mytry I/getFilesDir: /data/user/0/com.example.mytry/files
11-03 13:15:36.746 24507-24507/com.example.mytry I/com.getCacheDir.try: /data/user/0/com.example.mytry/cache
11-03 13:15:36.746 24507-24507/com.example.mytry I/getESDirectory: /storage/emulated/0

11-03 13:15:36.746 24507-24507/com.example.mytry I/com.example.try: /storage/emulated/0/Pictures

xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android">
            name="root_path"
        path="." />


 private File createOriImageFile() {
        String time = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File newFile = null;
        try {
            File imagePath = new File(getExternalCacheDir(), "demo");
            imagePath.mkdirs();
            newFile = File.createTempFile(time, ".jpg", imagePath);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return newFile;
    }
}

配置root-path就ok了。


FileProvider无法获取外置SD卡问题解决方案 | Failed to find configured root that contains 这是通过设置root-path 解决的



从Android官方文档中没有找到FileProvider对外置SD卡的支持的任何说明,但是调试代码可以发现:


root-path代表/也就是Android设备的根目录,该目录下包含着手机内部存储器,外置SD卡等所有文件的目录。

然后我们允许程序,发现将path设置为root-path解决了FileProvider无法使用外置SD卡的问题。

参考http://www.jianshu.com/p/121bbb07cb07


总结:也就是说,如果FileProvider如何获取SD卡创建文件夹,必须通过root-path,如果访问内存中的数据,可以通过其他路径如,只要对应即可。

                                                           注意坑!!!!!


你可能感兴趣的:(Android,细节整理)