使用Intent启动Media Player

时间:2013-06-12 13:12:48

标签: android android-intent audio-player android-music-player

我正在开发第一个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.INTENT_ACTION_MUSIC_PLAYER,因为它已被弃用。 我不能使用Intent.CATEGORY_APP_MUSIC,因为它需要min API lvl 15。我的项目的最低API级别应为8。

2 个答案:

答案 0 :(得分:5)

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

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));

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

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

答案 1 :(得分:2)

您仍然可以使用已弃用的意图来定位低于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。