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

共享原始资源android

伊锦
2023-03-14

我的原始资源中有. 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

为什么会发生这种情况?

共有1个答案

东博瀚
2023-03-14

为什么会发生这种情况?

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

您的两个主要选择是:

>

  • 将资源复制到文件中(例如,在getCacheDir()中),然后使用FileProvider为文件提供服务

    编写您自己的ContentProvider以直接为原始资源提供服务(在Context上使用getResources()获取Resources对象,然后从那里您可以在原始资源上获取InputStream

  •  类似资料:
    • 资源共享 资源共享目前面临的问题主要包括: 共享过程成本过高; 用户身份评分难 共享服务管理难 短租共享 大量提供短租服务的公司已经开始尝试用区块链来解决共享中的难题。 一份来着 高盛的报告 中宣称: Airbnb 等 P2P 住宿平台已经开始通过利用私人住所打造公开市场来变革住宿行业,但是这种服务的接受程度可能会因人们对人身安全以及财产损失的担忧而受到限制。而如果通过引入安全且无法篡改的数字化资

    • 通过XHR 实现Ajax 通信的一个主要限制,来源于跨域安全策略。默认情况下,XHR 对象只能访问与包含它的页面位于同一个域中的资源。这种安全策略可以预防某些恶意行为。但是,实现合理的跨域请求对开发某些浏览器应用程序也是至关重要的。 CORS(Cross-Origin Resource Sharing,跨源资源共享)是W3C 的一个工作草案,定义了在必须访问跨源资源时,浏览器与服务器应该如何沟通。

    • 问题内容: 我正在编写一个HTML5应用程序,该应用程序使用JSONP从几个不同的来源收集数据。我对GET所做的任何事情都可以正常工作。我现在正尝试发布数据,并且遇到了一个有趣的问题。我需要将数据从我的应用程序发布到另一个应用程序,该应用程序从本地计算机运行。我正在尝试编写具有跨平台功能的移动应用程序(请考虑使用Pulse / Flipboard),因此该代码将始终从本地源运行。我的思考过程如下:

    • 如何与ShareActionProvider共享drawable文件夹中的图像?我已经证明了很多事情,但它不起作用。 本例中的uri是什么?Uri=Uri。解析(“android。resource://com.android.example/“R.drawable.photo);不起作用。 非常感谢。

    • 跨域资源共享 (CORS) 跨域资源共享(Cross-Origin Resource Sharing)允许WEB端的应用程序访问不属于本域的资源 配置格式 CORS配置为json字符串,类似 { "rules":[ { "id":"id1" "AllowOrigin":"http://*.example.com" //指定允许发送跨源请求的源,支持使用通配符

    • 来自维基百科: 要发起跨源请求,浏览器发送带有源HTTP标头的请求。这个标题的值是为页面服务的站点。例如,假设http://www.example-social-network.com上的一个页面试图访问online-personal-calendar.com中的用户数据。如果用户的浏览器实现了CORS,则将发送以下请求头: 来源:http://www.example-social-network