
我最近在处理项目时遇到了一个小问题,即我需要编写一个View来控制系统音乐播放器的播放行为,并获取有关正在播放的音乐的信息,我可能只是想在开始时可以节省一些时间. ,因此我没有直接进入源代码,而是搜索了Internet,但是令我惊讶的是Internet上没有这样的东西. 确实没有儿童鞋能做到这一点吗?嘿,什么都不要说,开始:
获取系统正在播放的音乐的信息. 检查源代码以了解“音乐”应用程序中是否存在MediaPlaybackService.java文件. 我不会编写内部代码. 简而言之广播音乐播放软件,播放音乐有四种情况. 发送广播,这些广播包含正在播放的音乐的信息,因此我们只需要编写广播即可接收信息:
MusicBroadcastReceiver mbr = null;//定义
class MusicBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { artistName = intent.getStringExtra("artist"); album = intent.getStringExtra("album"); track = intent.getStringExtra("track"); playing = intent.getBooleanExtra("playing",false); duration = intent.getLongExtra("duration",3000); position = intent.getLongExtra("position",1000); Toast.makeText(TestActivity.this, "playing:" + playing, Toast.LENGTH_SHORT).show(); if(playing){ sd.setVisibility(View.VISIBLE); } else{ if((!sd.isOpened())){ sd.setVisibility(View.GONE); } } if(playing){ ((ImageView)findViewById(R.id.play)).setImageResource(R.drawable.music_pause); }else{ ((ImageView)findViewById(R.id.play)).setImageResource(R.drawable.music_play); } ((TextView)findViewById(R.id.musicName)).setText(track ); ((TextView)findViewById(R.id.musicInfo)).setText(artistName + " / " + album); } }

以上是广播接收机,需要在适当的时间进行注册. 由于MediaPlaybackService发送粘性广播,因此在打开应用程序时,我们的也可以接收此广播. 尽管我上方有那些TextView或ImageView.
注册进行广播:
@Override
protected void onResume() {
/**
* com.android.music.metachanged
* com.android.music.queuechanged",
* "com.android.music.playbackcomplete"
* "com.android.music.playstatechanged"
*/
mbr = new MusicBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.android.music.metachanged");
intentFilter.addAction("com.android.music.queuechanged");
intentFilter.addAction("com.android.music.playbackcomplete");
intentFilter.addAction("com.android.music.playstatechanged");
registerReceiver(mbr, intentFilter);
super.onResume();
}
![]()
注销广播:
@Override
protected void onPause() {
if(mbr != null){
unregisterReceiver(mbr);
}
super.onPause();
}
控制音乐播放:

音乐应用程序中还有一个MediaButtonIntentReceiver. 当我们可以发送特定的广播来控制音乐播放时,如下所示:
private static final String SERVICECMD = "com.android.music.musicservicecommand";
private static final String CMDNAME = "command";
/* private static final String CMDTOGGLEPAUSE = "togglepause";
private static final String CMDSTOP = "stop";*/
private static final String CMDPAUSE = "pause";
private static final String CMDPLAY = "play";
private static final String CMDPREVIOUS = "previous";
private static final String CMDNEXT = "next";
public void click(View v){
Intent intent = new Intent(SERVICECMD);
switch(v.getId()){
case R.id.pre:{
intent.putExtra(CMDNAME, CMDPREVIOUS);
}break;
case R.id.play:{
if(playing){
intent.putExtra(CMDNAME,CMDPAUSE);
((ImageView)findViewById(R.id.play)).setImageResource(R.drawable.music_play);
}else{
intent.putExtra(CMDNAME,CMDPLAY);
((ImageView)findViewById(R.id.play)).setImageResource(R.drawable.music_pause);
}
}break;
case R.id.next:{
intent.putExtra(CMDNAME,CMDNEXT);
}break;
}
sendBroadcast(intent);
}
广播时,您不需要设置“额外”,只需:

private static final String SERVICECMD = "com.android.music.musicservicecommand";
private static final String CMDNAME = "command";
/* private static final String CMDTOGGLEPAUSE = "togglepause";
private static final String CMDSTOP = "stop";*/
private static final String CMDPAUSE = "pause";
private static final String CMDPLAY = "play";
private static final String CMDPREVIOUS = "previous";
private static final String CMDNEXT = "next";
替换为
private static final String pause = "com.android.music.musicservicecommand.pause";
private static final String next = "com.android.music.musicservicecommand.next";
private static final String stop = "com.android.music.musicservicecommand.stop";
private static final String previous = "com.android.music.musicservicecommand.previous";
然后创建新的意图(暂停/下一个/停止/上一个);等待通过sendBroadcast发送(意图);也可以发送,但是我没有亲自验证广播音乐播放软件,您可以尝试一下,第一个已验证.
张贴: 以下是锁定屏幕时的图片. 左侧的部分与锁定屏幕有关. 不要受到它的影响.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-277020-1.html
看来这个狼真的来了
美国害的伊拉克还不够惨吗
因为直接守住小日本的出口要道