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

Android.os.FileUriExposedException在Oreo中引起(仅限!)[副本]

靳睿
2023-03-14

从Google Play控制台,我可以看到这个例外只发生在Android8.0+的设备上。

android.os.FileUriExposedException: 
at android.os.StrictMode.onFileUriExposed (StrictMode.java:1975)
at android.net.Uri.checkFileUriExposed (Uri.java:2355)
at android.content.Intent.prepareToLeaveProcess (Intent.java:9975)
at android.content.Intent.prepareToLeaveProcess (Intent.java:9950)
at android.content.Intent.prepareToLeaveProcess (Intent.java:9929)
at android.app.Instrumentation.execStartActivity (Instrumentation.java:1622)
at android.app.Activity.startActivityForResult (Activity.java:4748)
at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult (BaseFragmentActivityJB.java:10)
at android.support.v4.app.FragmentActivity.startActivityForResult (FragmentActivity.java)
at android.support.v4.app.ActivityCompatJB.finishAffinity (ActivityCompatJB.java)
or                                         .startActivityForResult (ActivityCompatJB.java)
at android.support.v4.app.ActivityCompat.a (ActivityCompat.java:6)
at android.support.v4.app.FragmentActivity.a (FragmentActivity.java:8)
at android.support.v4.app.FragmentActivity$HostCallbacks.a (FragmentActivity.java:2)
at android.support.v4.app.Fragment.a (Fragment.java:38)
at android.support.v4.app.Fragment.a (Fragment.java:1)
at de.test.testapp.FileManagerFragment.onClick (FileManagerFragment.java:113)
at android.view.View.performClick (View.java:6291)
at android.view.View$PerformClick.run (View.java:24931)
at android.os.Handler.handleCallback (Handler.java:808)
at android.os.Handler.dispatchMessage (Handler.java:101)
at android.os.Looper.loop (Looper.java:166)
at android.app.ActivityThread.main (ActivityThread.java:7390)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:245)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:926)

代码:

Intent intent = new Intent(Intent.ACTION_VIEW);
ArrayList<Uri> uri = new ArrayList<Uri>();
for (int i=0; i<checkedItems.size(); i++) {
    if (checkedItems.valueAt(i)) {
        intent.setDataAndType(Uri.fromFile(new File(projectDir, filename), "text/plain");
    }
}
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(intent, "Open RINEX File"));
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!-- To access Google+ APIs: -->
<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="de.test.testapp"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_providers_paths" />
    </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>

共有1个答案

阎星河
2023-03-14

尝试在onCreate内部添加此内容。

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
 类似资料:
  • 我是的新手,我必须制作一个音乐播放器。我从github中举了一个例子,我正在实现我需要的东西,但是当我将代码从更新到时,它会给我一个关于的错误: Android.app.remoteserviceException:StartForeground的错误通知:java.lang.runtimeException:服务通知的无效通道:通知(通道=null pri=0 contentview=null振

  • Google play商店仅在小米设备上显示崩溃(我无法复制)。请在下面找到崩溃日志。我也曾试图在小米设备上重现这次崩溃,但无法重现。 orker.run运行时异常:在xecutor.java:588AsyncTask$java.lang.(AsyncThread.run)在hread.java:818FutureTjava.lang.完成(FutureTin.betterbutter.andro

  • 我知道运行后台服务有一些限制,我可以通过使用服务方法来克服这些限制。 我的怀疑是;我应该对所有android版本使用这个方法吗?由于调用此方法将显示一个通知,如果可能的话,我希望在Oreo之前的版本中避免它。 因此,为了避免在pre-Oreo设备中显示通知,我可以使用下面的代码片段吗?它在奥利奥之前和之后的后台工作吗? null

  • 我有一个问题,在一个列的居中行。下面是我的html的样子: 我曾试图: 有什么其他的想法,如何或可能为什么我不能集中或保持回应?

  • 我在Orders文件夹中的外部存储中有图像,并且我正在尝试使用intent将该图像共享到外部应用程序 我给了加载应用程序本身的存储权限,但每次应用程序崩溃时我都得到了 有谁能帮我解决这个问题吗?我在谷歌上关注了很多帖子,但是没有用 https://github.com/mlsdev/rximagepicker/issues/13

  • 我有一个2个简单的项目,带有简单的python脚本。没有其他用户,没有java,没有数据库,没有部署,一点也不复杂。我已经排除了两个项目文件夹。我已经下载了共享索引,尽管我现在看到我不需要共享索引,因为我是一个孤独的程序员。我从网上搜索答案中看到,这个问题自2016年以来一直是一个问题!我安装了最新的PyCharm v2021.3.2。希望这个错误得到修复。似乎没有什么工作。我已经让它为HOURS