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

使用Intent启动媒体播放器

周峻
2023-03-14

我正在开发我的第一个Android应用程序。这是一个录音应用程序。我正在用MediaRecord录制语音,如下所示:

mRecorder = new MediaRecorder();
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mRecorder.setOutputFile(mFileName);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

        try {
            mRecorder.prepare();
        } catch (IOException e) {
            Log.e(LOG_TAG, "prepare() failed");
        }

        mRecorder.start();

我有另一个活动回放这些录制的声音(.3gpp文件)。在这个活动中,有一个包含我录制的声音的ListView。我想用手机上安装的任何音乐播放器播放声音。这里我的代码:(此代码的来源:https://stackoverflow.com/a/3367231/556169)

Intent intent = new Intent();  
intent.setAction(android.content.Intent.ACTION_VIEW);  
File file = new File((String) ((TextView) item).getText());  
intent.setDataAndType(Uri.fromFile(file), "audio/*");  
startActivity(intent);

但我得到了“音乐播放器不能播放这种媒体类型”的错误。

当我浏览这些音频文件并通过我的文件浏览器播放它们时,它工作得非常好(这意味着,我成功地录制了声音)。但是,当我在应用程序中使用Intent时,就会出现错误。

另外,我不能使用MediaStore。意图\动作\音乐\播放器,因为它已被弃用。我不能使用意图。类别应用音乐,因为它需要最低API 15级。我的项目的最小API级别应该是8。

共有2个答案

韩淇
2023-03-14

您仍然可以使用不推荐使用的意图以低于15的API级别为目标,然后使用新的意图以较新的API级别为目标。要做到这一点,只需在代码中进行如下检查:

if ( Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1 )  {
   // use the [MediaStore.INTENT_ACTION_MUSIC_PLAYER] intent
}
else  {
   // use the [Intent.CATEGORY_APP_MUSIC] intent
}

只要确保你的TargetAPI是15或更高;你的MinAPI可以是8。

宗冠宇
2023-03-14

我认为最好的选择是使用选择器活动,用户可以在其中选择他最喜欢的媒体播放器。

Intent viewIntent = new Intent(Intent.ACTION_VIEW);
File file = new File((String) ((TextView) item).getText());
viewIntent.setDataAndType(Uri.fromFile(file), "audio/*");
startActivity(Intent.createChooser(viewIntent, null));

顺便说一下,那种传递文件名的方式对我来说似乎有点奇怪。我会考虑改变它。

我不确定,但是如果您声明了相应的意图过滤器,您应该能够在选择器中看到您自己的播放器。

 类似资料:
  • 当我使用MediaPlayer播放mp3文件时,系统会报告错误日志:。但是RealPlayer是正常的。 我发现它的错误只发生在更高的ROM版本。像4.0版本一样,它有错误。在2.3版中,它没有这个错误。 代码: 日志猫错误:

  • 1.1.1. 多媒体播放 1.1.1. 多媒体播放 我们事实上对上游芯片厂商自带的播放器方式做了调整。 Amlogic 芯片 BaseCode 我们禁用了芯片厂商的原生代码的 libplayer 包,原因是芯片厂商的播放器是直接使用 ALSA 框架来调用音频播放功能的。 这对我们 RokidOS 平台让多个进程使用音频设备造成阻碍。基于这个因素,我们使用了 RokidOS 开发的媒体播放库 lib

  • 我正在开发一个包含一些音频播放器的RecyclerView的应用程序。应用程序将下载。3gp文件(如果尚未下载)。 当我单击playAudio按钮时,音频未被播放。 这是我的适配器代码: 我怎样才能解决这个问题?

  • zyMedia 是由掌阅科技开源的基于HTML5 video和audio的自定义UI多媒体播放器,经过多种移动端设备环境的检测(尤其是国产设备和浏览器),已用于公司的产品线。 特点: 支持主流移动设备移动端浏览器,适合国内移动环境。 支持多种视频、音频格式,如mp4、mp3、oga、webm等。 轻量,UglifyJS压缩14KB 已通过测试的设备: 小米1、小米2s、小米 MI3、红米、小米 M

  • 我想使用gstreamer进行网络传输。目的是启动视频内容(从发射机)并在接收机端播放。我编写了一个用于对网络内容进行流式传输的示例测试代码。 在发射机侧:GST\u DEBUG=“*:2”GST-launch-1.0 videotestsrc!视频/x-raw!jpegenc!rtpjpegpay!udpsink主机=127.0.0.1端口=5001 在接收器端:GST\u DEBUG=“*:2

  • 我正在尝试向seekbar添加一个音频文件,该文件将由seekbar控制,而无需向我的应用程序添加任何按钮。音频文件将附加到seekbar,通过seekbar进程,音量将增加或减少。下面是我的代码,我的应用程序正在崩溃,一次又一次,我不知道为什么。请在这方面帮助我。 下面是我的日志错误