共享原始资源 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>
paths.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()
returns 一个像这样的 Uri:android.resource://com.my.packagename/raw/sound.mp3
当我 运行 时,我要么没有收到任何错误,但意图没有出现,我的 activity 被重建,或者我得到这个:
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
为什么会这样?
Why is this happening?
资源是您开发机器上的文件。它们不是设备上的文件。设备上没有资源的文件系统路径,因此 FileProvider
无法为它们提供服务。
您的两个主要选择是:
将资源复制到文件(例如,在getCacheDir()
中),然后使用FileProvider
提供文件
编写自己的 ContentProvider
以直接提供原始资源(在 Context
上使用 getResources()
以获得 Resources
对象,并从在那里你可以在原始资源上获得 InputStream
)
我的原始资源中有 .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>
paths.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()
returns 一个像这样的 Uri:android.resource://com.my.packagename/raw/sound.mp3
当我 运行 时,我要么没有收到任何错误,但意图没有出现,我的 activity 被重建,或者我得到这个:
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
为什么会这样?
Why is this happening?
资源是您开发机器上的文件。它们不是设备上的文件。设备上没有资源的文件系统路径,因此 FileProvider
无法为它们提供服务。
您的两个主要选择是:
将资源复制到文件(例如,在
getCacheDir()
中),然后使用FileProvider
提供文件编写自己的
ContentProvider
以直接提供原始资源(在Context
上使用getResources()
以获得Resources
对象,并从在那里你可以在原始资源上获得InputStream
)