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

共享音频文件仅适用于某些应用程序

盛浩阔
2023-03-14

看来我有bug了。至少我认为这是一个错误。我编写了一种Soundboard并想添加与他人共享声音的功能。我要分享的代码如下:

public void share(Sound sound) {
    //libgdx command to copy an internal file(classpath) to external memory
    //sound.file is the relative path to the audio file that will be shared
    Gdx.files.internal(sound.file).copyTo(Gdx.files.external("/skrelpoid/KJ/share/" + sound.file));
    String sharePath = Environment.getExternalStorageDirectory().getPath() + "/skrelpoid/KJ/share/" + sound.file;
    Uri uri = Uri.parse(sharePath);
    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
    sendIntent.setType("audio/*");
    //app is the main application
    app.startActivity(Intent.createChooser(sendIntent, "Teile den Sound"));
}

我的问题是,这是可行的,但只适用于一些应用程序。例如,当我与WhatsApp或DropBox共享音频时,它似乎工作得很好,但当我尝试使用Google Drive或Bluetooth进行相同操作时,似乎出现了一些错误。请注意,音频的文件类型为WAV。我还确保我有权限写入外部存储,但仍然只有一些应用程序可以工作。我真的很迷茫,如果有人能帮助我,我将不胜感激。

共有1个答案

秦天宇
2023-03-14

错误似乎是因为Uri.parse(str)。以下代码(取自此处)似乎有效:

public void share(Sound sound) {
    Gdx.files.internal(sound.file).copyTo(Gdx.files.external("/skrelpoid/KJ/share/" + sound.file));
    File file = new File(Environment.getExternalStorageDirectory().getPath() + "/skrelpoid/KJ/share/" + sound.file);
    Uri uri = Uri.fromFile(file);
    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
    sendIntent.setType(MimeTypeMap.getSingleton().getMimeTypeFromExtension(sound.getExtension()));
    app.startActivity(Intent.createChooser(sendIntent, "Teile den Sound"));
}
 类似资料:
  • 我正在尝试制作一个用于共享音频文件的按钮。这不起作用。首先,我试图直接从原始文件夹发送文件,而不将其复制到手机卡上。这并没有解决我的问题。我尝试的第二件事是将文件保存到手机上,然后共享。将文件保存到手机的部分现在可以工作了,但当我尝试将音频文件共享到其他设备时,所有兼容的应用程序(Whatsapp、Gmail等)都崩溃了。 这是我的代码: 顺便说一下,音频文件是一个。ogg文件。我希望这些应用程序

  • REST API请求:EmployeeRequest。java id、名称、sal、位置-- 员工负责。java id、名称、sal、位置-- /api/employee 我不想在回复中使用除ID以外的其他字段 实际:`{id:“123”,“name:“null”,“sal:“null”,“location:“null”}但我只想要response id,而不是POST response的其他字段

  • 很长一段时间以来,我一直试图从assets文件夹中为不同类型的文件创建一个跨应用程序共享意图,但始终存在一个问题。我提出了许多不同类型的解决方案,例如: 尝试使用自定义内容提供商(此处或此处…) 尝试将文件保存在本地存储器上(此处示例) 和其他人,但由于它没有工作,我没有链接了 现在,这是我的工作解决方案,用于仅将音频文件共享给WhatsApp和Messenger,所有其他应用程序都失败了)。 我

  • 问题内容: 我有一个包含几个容器的容器。其中三个用于我的应用程序(客户端,服务器和数据库),其余用于各种开发工具(例如psql,npm,manage.py等)。当我完成所有这些操作时,但是我只希望三个主要功能开始。由于已指定了链接,因此只能从这三个开始,但输出仅来自该一个容器。因此,有没有一种方法可以执行以下任一操作: 告诉docker-compose哪个容器应该由以下对象启动 从所有链接的容器获

  • 长按按钮时,我正在尝试共享声音文件。这是我的代码: 然而,当我长按按钮时,共享菜单出现,但我只能与WhatsApp共享声音。任何其他应用程序都无法运行。(Gmail给了我一条消息,说“不能附加空文件”。声音是.ogg格式的,我试着把它转换成.wav,但它给了我同样的问题。我做错了什么?

  • 问题内容: 我有一些通用的设置代码,已将这些代码分解为标记为的方法。但是,不必为每个测试都运行所有这些代码。有没有一种标记方式,使得该方法仅在某些测试之前运行? 问题答案: 只需将不需要安装代码的测试移到单独的测试类中即可。如果您有一些测试通用的其他代码,可以帮助保留这些代码,请将其移到帮助程序类中。