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

使用FileProvider共享/data/user/0/目录中的音频文件

施喜
2023-03-14

我正在使用FileProvider API来共享实际存储在内部存储中的内容。

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <cache-path name="xs_audio" path="/audio/records"/>
</paths>
    private final static String FILE_PROVIDER = BuildConfig.APPLICATION_ID + ".fileprovider";
        
    private String testPackageAppHaveAccess = "com.whats";
            public static void shareDocument(Activity activity, CallRecordData data) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_SEND_MULTIPLE);
                intent.putExtra(Intent.EXTRA_SUBJECT, "Record File");
                intent.setType("audio/*");
        
                ArrayList<Uri> files = new ArrayList<>();
                //for (AudioModelObj image : data.getDocuments()) {
                    files.add(getImageUri(activity, data.getFile()));
                //}
        
                activity.grantUriPermission(testPackageAppHaveAccess, files.get(0), Intent.FLAG_GRANT_READ_URI_PERMISSION);
                intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files);
                activity.startActivity(Intent.createChooser(intent, "Share Audio File."));
            }
        
            private static Uri getImageUri(Activity activity, String audioURI) {
                if (Build.VERSION.SDK_INT < 24) {
                    return Uri.parse(audioURI);
                } else {
                    URI uri = URI.create(audioURI);
                    File file = new File(uri);
                    return FileProvider.getUriForFile(activity, FILE_PROVIDER, file);
                }
            }
}

有什么建议我做错了什么吗?

共有1个答案

益英逸
2023-03-14

>

  • 已经指向某些设备上的/data/user/0/com.xl.cl.debug

    是您应该使用的内容,它将path替换为感兴趣的子目录(audio/records),消除/data/user/0/com.xl.cl.debug/cache

    您正在调用granturipermission(),其中第一个参数不是包

    您正在调用granturipermission(),其中第一个参数不是标识您试图授予权限的应用程序的包

    您没有将flag_grant_read_uri_permission添加intent中,这是一种典型的说法,即“此intent中的URI应可由此intent的接收者读取”(尽管action_send_multiple可能需要更多的工作,因为我没有玩过这么多)

    人类历史上没有一个文件系统路径是以content:/开头的,所以要去掉它

    调用new File()并提供不是文件系统路径的值将无法正常工作

    可能有更多的问题,但这应该使你开始

  •  类似资料:
    • 我正在尝试制作一个用于共享音频文件的按钮。这不起作用。首先,我试图直接从原始文件夹发送文件,而不将其复制到手机卡上。这并没有解决我的问题。我尝试的第二件事是将文件保存到手机上,然后共享。将文件保存到手机的部分现在可以工作了,但当我尝试将音频文件共享到其他设备时,所有兼容的应用程序(Whatsapp、Gmail等)都崩溃了。 这是我的代码: 顺便说一下,音频文件是一个。ogg文件。我希望这些应用程序

    • 但是,执行这一行给了我(为了保护无辜者而改变了名字): 应用程序A在清单文件中有以下内容: filePaths.xml具有: 文件最终的实际路径是: 在这一点上,我被难住了。我不知道为什么不能授予我在同一个应用程序中创建的文件的权限。所以我的问题是:为什么我会得到这个异常,我如何才能成功地授予应用程序B的权限?

    • 跟随https://developer.android.com/training/secure-file-sharing/index.html,并能够共享文件在内部目录(/data/data/pack/files/xxx/)的应用程序到客户端应用程序使用file提供程序。 如何将资产文件夹(而不是内部目录)中的文件共享到客户端应用程序。 谢谢

    • 我正在尝试传递一个位于我的应用程序的res/raw目录中的图像以及共享意图。 我遵循了FileProvider文档中描述的流程,下面是我的代码: Androidanifest.xml 我的活动中的代码: 由于无法访问我在其他应用程序中获取的文件,因此上述操作无效: java.io.FileNotFoundException:FILE_PATH:打开失败: EACCES(权限拒绝) 知道我做错了什么

    • 我正在尝试共享RES/RAW文件夹中的音频文件。到目前为止我所做的是: 例如,当我选择在GMail上分享它时,它会说“无法附加空文件”之类的话。看来我没有得到正确的文件路径,所以我基本上没有共享任何东西。我做错了什么? 任何帮助都将不胜感激。

    • 我正在尝试使用文件提供商共享存储在我的应用程序内部存储器的原始文件夹中的MP3文件,并允许用户使用他们选择的音频收听应用程序打开共享的MP3文件。 然而,在我编写的代码中,当我尝试使用附加的内容URI作为数据执行意图时,会出现FileNotFoundException。这会导致FileProvider系统的所有其他方面出现故障。 我创建了一个MediaPlayer,让它毫无问题地打开了我想要共享的