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

通过clipdata.item.geturi在应用程序之外公开

寇夜洛
2023-03-14
android.os.FileUriExposedException: file:///storage/emulated/0/MyApp/Camera_20180105_172234.jpg exposed beyond app through ClipData.Item.getUri()

所以我希望有人能帮我解决这个问题:)

谢谢

private Uri getTempUri() {
    // Create an image file name
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
    String dt = sdf.format(new Date());
    imageFile = null;
    imageFile = new File(Environment.getExternalStorageDirectory()
            + "/MyApp/", "Camera_" + dt + ".jpg");
    AppLog.Log(
            TAG,
            "New Camera Image Path:- "
                    + Environment.getExternalStorageDirectory()
                    + "/MyApp/" + "Camera_" + dt + ".jpg");
    File file = new File(Environment.getExternalStorageDirectory() + "/MyApp");
    if (!file.exists()) {
        file.mkdir();
    }
    imagePath = Environment.getExternalStorageDirectory() + "/MyApp/"
            + "Camera_" + dt + ".jpg";
    imageUri = Uri.fromFile(imageFile);
    return imageUri;
}

共有1个答案

白永昌
2023-03-14

对于SDK24及以上版本,如果需要获取应用程序存储之外的文件Uri,则会出现以下错误。
@eranda.del解决方案允许您更改策略以允许此操作,并且运行良好。但是,如果您希望遵循google指南而不必更改应用程序的API策略,则必须使用文件提供程序。

首先,要获取文件的URI,需要使用FileProvider.getUriforFile()方法:

Uri imageUri = FileProvider.getUriForFile(
            MainActivity.this,
            "com.example.homefolder.example.provider", //(use your app signature + ".provider" )
            imageFile);

然后您需要在您的android清单中配置您的提供程序:

<application>
  ...
     <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.example.homefolder.example.provider"
        android:exported="false"
        android:grantUriPermissions="true">
        <!-- ressource file to create -->
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths">  
        </meta-data>
    </provider>
</application>
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="." />
</paths>
 类似资料:
  • 在以Android API<24为目标的Delphi早期版本(10.3 Rio之前)中,可以创建文件意图,如使用Delphi使用外部图库打开图像的问题答案所示 但是,既然10.3的目标是Android API>=24,那么这段代码就会产生这个问题的主题。 我试图在Delphi使用android fileprovider向默认的android gallery发送打开和图像文件的意图来回答这个问题,但

  • 问题陈述 我正在尝试创建VCardfile,它已经成功创建,但是,我想共享创建的文件

  • 问题内容: 当前,我有一个Java Standalone Swing应用程序。 现在,当用户单击Swing应用程序中的按钮时,我想启动另一个Java应用程序(说:Calculator.jar) 我可以知道什么是便携式方法吗?这样它就可以在多个OS中工作吗? 问题答案: 使用或只是将其放在类路径中并调用其。

  • 问题内容: app.py test.py 我正在将 应用程序 导入到 test.py中 以进行单元测试。在将’ before_request ‘函数调用到test.py中时,它会抛出RuntimeError:在应用程序上下文之外工作同样会在调用’ input_info() ‘时发生 问题答案: Flask有一个Application Context ,似乎您需要执行以下操作: 您可能还可以将调用推

  • 我已经从服务器下载了apk文件,现在正在安装,但它给了我一个错误:通过Intent暴露在应用程序之外。getData() 我的代码是 我已经搜索了错误,找到了一些但无法解决的问题。建议使用FileProvider。我这样做只是为了查看日志 可能会有帮助。 请提供帮助和建议。

  • 问题内容: 我有一个外部程序Otter,该程序将一些文件名作为参数并创建了一个输出文件,也将其指定为参数。因此,例如,如果我的输入是“ proof.in”,并且我希望将输出放置在“ proof.out”文件中,则可以在终端中运行以下命令: “ proof.in”文件必须与水獭可执行文件位于同一文件中。 问题是我需要Java提供此功能,因此在我的Java代码中执行以下操作: 但是在此行之后,整个用户