我想编写一个应用程序将当前播放的音乐流式传输到另一台设备。两个设备之间的连接确实有效,我也可以通过 wifi 传输一些字符串,但我在获取当前曲目时遇到了问题。
我使用此博客的代码来获取当前播放曲目的一些信息,但我无法获取文件的路径。
我认为当我收到专辑、曲目或艺术家时,应该可以找到路径。但我试了又试,没有找到任何东西。所以我问:是否有可能通过接收器获得路径?如果没有,还有其他方法可以获取当前曲目及其路径吗?
我为此搜索了很多,我找到了很多解决方案,但它们对我不起作用。最后我使用了所有现有解决方案的组合并且它起作用了。您必须在您的应用程序中添加所有其他播放器。然后它将为您返回当前正在播放的歌曲的标题(如果您的歌曲没有标题,它将返回文件名):
intent.getStringExtra("track")
最后查询这首特定歌曲,您可以访问有关这首歌曲的所有信息,当然还有它的路径。如果它适合你,请告诉我。这对我有用:
public class GetMusic extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.get_music);
IntentFilter iF = new IntentFilter();
iF.addAction("com.android.music.playstatechanged");
iF.addAction("com.htc.music.playstatechanged");
iF.addAction("fm.last.android.playstatechanged");
iF.addAction("com.sec.android.app.music.playstatechanged");
iF.addAction("com.nullsoft.winamp.playstatechanged");
iF.addAction("com.amazon.mp3.playstatechanged");
iF.addAction("com.miui.player.playstatechanged");
iF.addAction("com.real.IMP.playstatechanged");
iF.addAction("com.sonyericsson.music.playstatechanged");
iF.addAction("com.rdio.android.playstatechanged");
iF.addAction("com.samsung.sec.android.MusicPlayer.playstatechanged");
iF.addAction("com.andrew.apollo.playstatechanged");
iF.addAction("gonemad.dashclock.music.playstatechanged");
iF.addAction("com.piratemedia.musicmod.playstatechanged");
iF.addAction("com.tbig.playerpro.playstatechanged");
iF.addAction("org.abrantix.rockon.rockonnggl.playstatechanged");
iF.addAction("com.maxmpz.audioplayer.playstatechanged");
iF.addAction("com.doubleTwist.androidPlayer.playstatechanged");
iF.addAction("com.lge.music.playstatechanged");
registerReceiver(mReceiver, iF);
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Uri mAudioUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.TITLE + " == \"" + intent.getStringExtra("track") + "\"";
String[] STAR = { "*" };
Cursor cursor = getContentResolver().query(mAudioUri,STAR, selection, null, null);
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
if (cursor.getColumnIndex(MediaStore.Audio.Media.TITLE) != -1) {
String fullpath = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DATA));
Toast.makeText(getApplicationContext(),"song path: " + fullpath,Toast.LENGTH_LONG).show();
}
}
}
};
}