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

时间:2017-10-17 12:10:47

标签: android audio android-intent android-fileprovider android-sharing

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

以下是我的xml配置,该配置与Manifiest文件中配置的Provider链接。

<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);
                }
            }
}

但是在使用应用程序启动时,它没有附加任何内容。在gmail的情况下,它说&#34;不能附加空文件&#34;。文件确认可用,因为我显示文件列表和播放。

供参考:从getImageUri(..)生成的Uri是

  

/data/user/0/com.xl.cl.debug/cache/audio/records/17-10-17_170728_abc_.wav

有什么建议我做错了吗?

1 个答案:

答案 0 :(得分:2)

  • <files-path>已经指出某些设备上的内容/data/user/0/com.xl.cl.debug

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

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

  • 您正在调用grantUriPermission(),其中第一个参数不是标识您要向其授予权限的应用的包

  • 您没有将FLAG_GRANT_READ_URI_PERMISSION添加到Intent,这是一种典型的说法,“收件人应该可以阅读此Uri Intent这个Intent“(尽管ACTION_SEND_MULTIPLE可能需要更多的工作,因为我没有那么多玩过)

  • 人类历史记录中没有文件系统路径以content:/开头,所以摆脱

  • 调用new File()并提供非文件系统路径的值不会很好用

可能会出现更多问题,但这应该让你开始