思路
1. 在Service中使用广播接受者
2. activity中,点击事件发送广播
3. 动态注册广播(不推荐使用静态广播)
code
1.AndroidManifest.xml
<service android:name=".service.PlayService"/>//注册服务
2.PalyService
public class PlayService extends Service {
private MediaPlayer mediaPlayer ;
MyBroadReceiver myBroadReceiver;
@Override
public void onCreate() {
super.onCreate();
initMedia();
//动态注册广播接受者。
myBroadReceiver = new MyBroadReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("zheng.xing.hua");//说明它接收的action
registerReceiver(myBroadReceiver, filter);//注册
}
public class MyBroadReceiver extends BroadcastReceiver{
public void show(){Log.e("xx","在service中广播被接受了");}
@Override
public void onReceive(Context context, Intent intent) {
Log.e("xx","我接受了广播");
String temp=intent.getStringExtra("url");
pareToPlay(temp);
play();
}
}
private void initMedia() {
mediaPlayer = new MediaPlayer();
}
void pareToPlay(String url) { //准备播放音乐,url是音乐的绝对地址。
try {mediaPlayer.reset();
//设置播放音乐的地址
mediaPlayer.setDataSource(getApplicationContext(), Uri.parse(url));
mediaPlayer.prepare();
} catch (IOException e) { e.printStackTrace();}
}
//调用函数播放
void play(){
mediaPlayer.start();
}
@Override
public void onDestroy() {
unregisterReceiver(myBroadReceiver);//记得销毁
super.onDestroy();
}
}
3.活动点击事件
public void onclick(View view) {
Intent intent =new Intent();
intent.setAction("zheng.xing.hua");//值必须和注册的一样不然没用。
intent.putExtra("url",music.getSong_url());
//这里的musi是我自己封装的。
// 值:/storage/emulated/0/netease/cloudmusic/Music/程佳佳 - 山楂树之恋.mp3
sendBroadcast(intent);
}