在Android上使用默认音乐播放器播放歌曲

9
我的应用程序显示来自SD卡的歌曲列表。我想要能够在默认播放器上播放歌曲。我已经获取了有关歌曲的所有数据:ID、标题、专辑、艺术家、路径...
有没有办法启动默认播放器播放歌曲?
我尝试过以下方法:
1. 使用 Intent.CATEGORY_APP_MUSIC。我可以启动默认播放器,但无法设置歌曲。Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_MUSIC) 打开默认的音乐应用程序。然而,intent.setData(Uri.withAppendedPath(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id)) 抛出未找到意图的异常。
2. 使用不推荐使用的 MediaStore.INTENT_ACTION_MUSIC_PLAYER。未找到活动。Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER).setDataAndType(Uri.fromFile(songFile), "audio/*")
3. 使用 INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH。启动搜索,但不是歌曲,说无法准备播放音乐的混音。但是,它可以从Google现在工作,所以这可能是关键。Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).putExtra(SearchManager.QUERY, name)
4. 使用 ACTION_VIEW。它可以工作,但会启动一个简化版本的播放器,我想要完整的播放器。
注意:我想要启动外部播放器,而不是在我的应用程序中。
更新:看起来谷歌现在硬编码支持Play音乐和YouTube。

可能是Android使用意图启动音乐播放器的重复问题。 - Ashkan Sarlak
实际上不是,我想要播放特定的歌曲,而不仅仅是音乐播放器。 - Yoav Sternberg
你找到答案了吗? - Edgar prabhu
4个回答

4
如果您想启动设备上的默认音乐播放器应用程序,请尝试这样做:
Intent intent = new Intent();  
intent.setAction(android.content.Intent.ACTION_VIEW);  
File file = new File(YOUR_SONG_URI);  
intent.setDataAndType(Uri.fromFile(file), "audio/*");  
startActivity(intent);

它启动了默认音乐播放器的精简版,详见更新问题中的图片。 - Yoav Sternberg
啊,抱歉,我误解了你的意思! - narancs
没问题,这是最接近的解决方案。 - Yoav Sternberg
嘿,我有一个想法,但它是非常黑魔法的Android。你应该为默认音乐播放器创建一个假的启动器图标。在这种情况下,操作系统会认为它应该启动该应用程序。这种解决方案的缺点是:仅适用于一个播放器。 - narancs
启动默认媒体播放器很容易,但是设置歌曲却不是。 - Yoav Sternberg

2

该应用推出了紧凑版,以便于播放。你可以发现许多第三方应用程序打开完整的应用程序。

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

由于您已经尝试过这个,


0

试着用一些简单的东西,比如这个:

MediaPlayer mp = new MediaPlayer();     
mp.setLooping(true);
try {
    mp.setDataSource(mFile); //mFile is the path to your mp3 file
} catch (Exception e) {
    e.printStackTrace();
}
try {
    mp.prepare();
} catch (Exception e) {
    e.printStackTrace();
}
mp.start();

再举一个使用MadiaPlayer和保存在res/raw/目录中的文件的例子:

MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you

更多关于:http://developer.android.com/guide/topics/media/mediaplayer.html


1
注意:我想启动外部播放器,而非在我的应用程序中。 - Yoav Sternberg
嗯,你试过将这个选为最佳答案吗?链接在这里:https://dev59.com/inA75IYBdhLWcg3wxcHV - Gabriella Angelova
是的,它会启动一个紧凑版,仅用于游戏而不是整个客户端。 - Yoav Sternberg

0
 Intent musicIntent = new Intent();  
 //use Action VIEW to launch app
 musicIntent.setAction(Intent.ACTION_VIEW);    

String mimeType  = getMimeTypeFromFile(); // in your case it is audio
Uri uri = " yourfile uri";
musicIntent.setDataAndType(uri,mimeType);
startActivity(intent);

如果更改了MIME类型,则将打开默认视图应用程序,对于视频MIME类型将打开视频播放器,对于音频将打开音乐播放器,对于图像将打开图库。

如果有多个播放器,则会打开Resolver活动。

不要忘记捕获ActivityNotFoundException

在音乐播放器中,对于ACTION_VIEW AudioPreview活动具有优先级。还有其他处理此操作的活动,请检查一次使用动作“com.android.music.PLAYBACK_VIEWER”而不是ACTION_VIEW或与其一起使用。


这与我问题中的解决方案4有何不同? - Yoav Sternberg
检查音乐应用程序的AndroidManifest.xml文件,您可以从AndroidXRef获取代码。 - Rahul Patil
android.content.ActivityNotFoundException:找不到处理意图{act=com.android.music.PLAYBACK_VIEWER dat=content://media/external/audio/media/2797 typ=audio/*}的活动。 - Yoav Sternberg
@RahulPatil。你能回答我吗?https://stackoverflow.com/q/59809009/4568864 - user4568864

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接