繁体   English   中英

分享原始资源android

[英]Share raw resources android

我的原始资源中有 .mp3、.mp4 和 .jpg 文件。 我想与社交应用分享这些文件。 为此,我尝试设置文件提供程序,但没有成功。

显现:

<provider
  android:name="androidx.core.content.FileProvider"
  android:authorities="com.my.packagename.fileprovider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
      android:name="android.support.FILE_PROVIDER_PATHS"
      android:resource="@xml/paths" />
</provider>

路径.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths>

<files-path name="file_path" path="."/>

<external-files-path name="external_path" path="/" />

</paths>

这就是我尝试共享文件的方式(在本例中为音频):

File file = new File(mAudio.getSoundUri().getEncodedPath());
Uri soundUri = FileProvider.getUriForFile(
                getContext(),
                "com.my.packagename.fileprovider",
                file);
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("audio/mp3");
sharingIntent.putExtra(Intent.EXTRA_STREAM, mAudio.getSoundUri());
startActivity(Intent.createChooser(sharingIntent, "Send"));

mAudio对象的getSoundUri()返回一个像这样的 Uri: android.resource://com.my.packagename/raw/sound.mp3

当我运行它时,我要么没有收到任何错误,但没有显示意图并且我的活动被重建,或者我得到了这个:

java.lang.IllegalArgumentException: Failed to find configured root that contains /raw/sound.mp3

我试图从 Uri 中删除 /raw 但我得到了同样的错误:

java.lang.IllegalArgumentException: Failed to find configured root that contains /sound.mp3

为什么会这样?

为什么会这样?

资源是开发机器上的文件。 它们不是设备上的文件。 设备上没有资源的文件系统路径,因此FileProvider无法为它们提供服务。

您的两个主要选择是:

  1. 将资源复制到文件(例如,在getCacheDir()中),然后使用FileProvider来提供文件

  2. 编写您自己的ContentProvider以直接提供原始资源(在Context上使用getResources()来获取Resources object,然后您可以从那里获取原始资源上的InputStream

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM