Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Intent ACTION_VIEW无法从外部sd卡打开文件_Android_File_Android Intent - Fatal编程技术网

Android Intent ACTION_VIEW无法从外部sd卡打开文件

Android Intent ACTION_VIEW无法从外部sd卡打开文件,android,file,android-intent,Android,File,Android Intent,当用户选择一个文件时,它会触发此代码 public static void openFiles(File file, Context context) { Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID, file); MimeTypeMap mimeType = MimeTypeMap.getSingleton(); String type = mi

当用户选择一个文件时,它会触发此代码

public static void openFiles(File file, Context context) {
        Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID, file);
        MimeTypeMap mimeType = MimeTypeMap.getSingleton();
        String type = mimeType.getMimeTypeFromExtension(file.getName().substring(file.getName().lastIndexOf(".") + 1).toLowerCase());
        //Toast.makeText(context, type, Toast.LENGTH_SHORT).show();
        if (type == null) type = "*/*";
        Intent share = new Intent(Intent.ACTION_VIEW);
        share.setDataAndType(uri, type);
        share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        context.startActivity(share);
        //context.startActivity(Intent.createChooser(share, file.getName()));
    }
问题:

当我从内部存储器中选择一个文件时,它工作正常,但当我试图从外部sd卡打开一个文件时,我得到了这个例外

I/ViewRootImpl@f0cb2c4[MainActivity]: ViewPostIme pointer 0
I/ViewRootImpl@f0cb2c4[MainActivity]: ViewPostIme pointer 1
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.files, PID: 21495
    java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/5A85-D438/DCIM/Camera/20200406_100806.jpg
        at androidx.core.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:744)
        at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:418)
        at com.example.files.JFileAdapter.openFiles(MainActivity.java:596)
        at com.example.files.JFileAdapter.clickItem(MainActivity.java:579)
        at com.example.files.JFileAdapter.lambda$getView$0$JFileAdapter(MainActivity.java:501)
        at com.example.files.-$$Lambda$JFileAdapter$7O8geCTLRGHMEPzMgOfCRCbnWso.onClick(Unknown Source:8)
        at android.view.View.performClick(View.java:7862)
        at android.view.View.performClickInternal(View.java:7831)
        at android.view.View.access$3600(View.java:879)
        at android.view.View$PerformClick.run(View.java:29359)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:8167)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
I/Process: Sending signal. PID: 21495 SIG: 9
res/xml/file\u路径

<?xml version="1.0" encoding="utf-8"?>
<paths >
    <cache-path name="cache" path="." />
    <files-path name="files" path="." />
    <external-path name="files" path="." />
</paths>

显示

<provider
     android:name="androidx.core.content.FileProvider"
     android:grantUriPermissions="true"
     android:exported="false"
     android:authorities="${applicationId}">
     <meta-data
          android:name="android.support.FILE_PROVIDER_PATHS"
          android:resource="@xml/file_paths"/>
</provider>


我做错了什么,他没有打开外部sd卡文件?

文件提供商通常不从可移动的micro sd卡提供服务

但对于Android 10,如果您在xml文件中添加一行,就可以了:

<root-path name="root" path="." />


您甚至可以删除所有其他路径声明。

这看起来有点相关:顺便说一句,什么适用于android 11?或者没有…我只知道它对安卓11设备没有任何作用。但您始终可以下载旧的FileProvider.java文件并将其添加到源代码中。或相应地编辑新的。请参阅: