当前位置: 首页 > 知识库问答 >
问题:

JAVAlang.IllegalArgumentException:未能找到包含/storage/emulated/0/Pictures的已配置根目录

颛孙森
2023-03-14

我试图通过Instagram的意图共享文件,但我意识到在API 24上,我不能只共享URI到其他应用程序没有给它的权限。

此后https://inthecheesefactory.com/blog/how-to-share-access-to-file-with-fileprovider-on-android-nougat/en在本教程中,我设置了提供程序并提供如下路径:

清单

<provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="myapplication.file_provider"
        android:exported="false"
        android:grantUriPermissions="true"
        tools:node="replace">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>

注意:有“tools:node=replace”覆盖库RxPaparazzo中的提供程序。

提供者路径。xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="files/"/>
</paths>

保存位图并获取uri的代码

public static Uri savePicture(Context context, Bitmap bitmap) {
        int cropHeight;
        if (bitmap.getHeight() > bitmap.getWidth()) cropHeight = bitmap.getWidth();
        else                                        cropHeight = bitmap.getHeight();

        bitmap = ThumbnailUtils.extractThumbnail(bitmap, cropHeight, cropHeight, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);

        File mediaStorageDir = new File(
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                context.getString(R.string.app_name)
        );

        if (!mediaStorageDir.exists()) {
            if (!mediaStorageDir.mkdirs()) {
                return null;
            }
        }

        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File mediaFile = new File(
                mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"
        );

        // Saving the bitmap
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);

            FileOutputStream stream = new FileOutputStream(mediaFile);
            stream.write(out.toByteArray());
            stream.close();

        } catch (IOException exception) {
            exception.printStackTrace();
        }

        // Mediascanner need to scan for the image saved
        Intent mediaScannerIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        Uri fileContentUri = Uri.fromFile(mediaFile);
        mediaScannerIntent.setData(fileContentUri);
        context.sendBroadcast(mediaScannerIntent);

        return fileContentUri;
    }

组合文件提供程序Uri

Uri savedBitmap = ImageUtility.savePicture(getContext(), shareBitmap);
File media = new File(savedBitmap.getPath());
Uri contentUri = FileProvider.getUriForFile(getContext(), "myapplication.file_provider", media);

日志错误:

JAVAlang.IllegalArgumentException:未能找到包含/storage/simulated/0/Pictures/Polfaced/IMG_20170203_155130的配置根目录。jpg

尝试使用通用软件的StreamProvider,但我认为库有不同的目的(修复另一种类型的问题),尝试保存文件到getFileDir而不是Environment.getExtranalStoragePublicDirectory但图像没有保存,并获得类似的错误/

共有1个答案

郎睿
2023-03-14

改变

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="files/"/>
</paths>

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

如您在上面共享的链接中所述。

以下提供者:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="files/"/>
</paths>

将解决路径看起来像

/storage/emulated/0/files/

但是你分享的道路

/storage/emulated/0/Pictures/Polfaced/IMG_20170203_155130.jpg

不包括或开头:

/storage/emulated/0/files/

了解什么

path="."

确实,请详细阅读您共享的链接。

 类似资料:
  • 寻找一些错误的帮助,我正在尝试存储我正在尝试开发的应用程序的相机拍摄的照片。错误是 JAVAlang.IllegalArgumentException:未能找到包含/storage/emulated/0/Pictures/JPEG20161108_153704的已配置根目录_ logcat在我的代码中FileProvider所在的行中指向这个方法。正在调用getUriForFile。。 此方法用于

  • 编辑:好的,我已经尝试了这些建议,并将其更改为getExternalFilesDir(),但仍然收到相同的错误。跳到底部显示“已编辑代码”的地方,查看它现在是什么。我还更改了它,这样屏幕截图将保存到图片目录,而不是创建一个新目录。(结束编辑) 我有一个android应用程序,其中包含一个recyclerview。我已经创建了一个按钮,该按钮将导出并创建recyclerview数据的PNG,将其保存

  • Java文件: java.lang.IllegalArgumentExcture:未能找到包含 /storage/emulated/0/Android/data/com.chandan.halo/files/Pictures/JPEG_20170216_233855_-96483920.jpg的配置根 第Uri photouURI=…行中出现错误。。。。。。 文件\u paths.xml mani

  • 构建基本的应用程序,并获得IllegalArgument异常:有一个按钮启动相机应用程序,我试图将图像保存到图片。 发现一些类似问题,但无法解决我的问题: Android:FileProvider IllegalArgumentException未能找到包含/data/data/**/files/Videos/final的已配置根目录。mp4 FileProvider“找不到配置的根目录”异常 下

  • 我尝试使用以下方法从URI获取路径: 当我尝试压缩位图时: 我得到这个错误:

  • 我试图发送使用tcp套接字的文件列表,但我得到这个文件提供商错误。谢啦 原因:java。lang.IllegalArgumentException:未能找到包含 文件路径 文件路径。xml manifest.xml: