【Android】基于Service组件的简易音乐播放器
来源:互联网 发布:淘宝商店如何开通花呗 编辑:程序博客网 时间:2024/05/16 04:56
BroadcastReceiver是一种全局监听器,可以让不同组件之间进行通信。下面展示一个基于Service组件的音乐盒,音乐由后台运行的service组件播放,当后台播放状态改变时,通过发送广播通知前台Activity更新界面;当用户单击前台Activity界面按钮,发送广播通知后台Service改变播放状态。
MainActivity代码:
public class MainActivity extends Activity implements View.OnClickListener { ImageButton play, stop; TextView name, author; String[] names = new String[]{"美丽新世界","约定","心愿"}; String[] authors = new String[]{"伍佰","周蕙","无名氏"}; public static final String CTL_ACTION = "com.yy.action.CTL_ACTION"; public static final String UPDATE_ACTION = "com.yy.action.UPDATE_ACTION"; ActivityReceiver activityReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); play = (ImageButton) findViewById(R.id.play); stop = (ImageButton) findViewById(R.id.stop); name = (TextView) findViewById(R.id.name); author = (TextView) findViewById(R.id.author); play.setOnClickListener(this); stop.setOnClickListener(this); //注册BroadcaReceiver activityReceiver = new ActivityReceiver(); IntentFilter filter = new IntentFilter(UPDATE_ACTION); registerReceiver(activityReceiver,filter); Intent intent = new Intent(MainActivity.this, MusicService.class); startService(intent); //启动Service } //自定义BroadcastReceiver,负责监听从Service传回来的广播 public class ActivityReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { int update = intent.getIntExtra("update",-1); int current = intent.getIntExtra("current",-1); name.setText(names[current]); author.setText(authors[current]); switch (update){ case 0x11: play.setImageResource(R.drawable.play); break; case 0x12: play.setImageResource(R.drawable.pause); break; case 0x13: play.setImageResource(R.drawable.play); break; } } } @Override public void onClick(View v) { Intent intent = new Intent(CTL_ACTION); switch (v.getId()){ case R.id.play: intent.putExtra("control",1); break; case R.id.stop: intent.putExtra("control",2); break; } //发送广播 sendBroadcast(intent); }}
Service代码:
public class MusicService extends Service { String[] musics = new String[]{"beautiful.mp3","promise.mp3","wish.mp3"}; AssetManager am; MediaPlayer mPlayer; ServiceReceiver serviceReceiver; int status = 0x11; //0x11没有播放,0x12正在播放,0x13暂停 int current = 0; @Override public IBinder onBind(Intent intent) { return null; } public class ServiceReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { int control = intent.getIntExtra("control", -1); switch (control){ case 1: if(status== 0x11) { prepareAndplay(musics[current]); status = 0x12; }else if(status==0x12) { mPlayer.pause(); status = 0x13; }else if(status==0x13){ mPlayer.start(); status = 0x12; } break; case 2: if(status==0x12||status==0x13){ mPlayer.stop(); status = 0x11; } } //发送广播通知Activity更改界面 Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION); sendIntent.putExtra("update",status); sendIntent.putExtra("current",current); sendBroadcast(sendIntent); } } private void prepareAndplay(String music) { try { AssetFileDescriptor afd = am.openFd(music); mPlayer.reset(); mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); mPlayer.prepare(); mPlayer.start(); } catch (IOException e) { e.printStackTrace(); } } @Override public void onCreate(){ super.onCreate(); am = getAssets(); mPlayer = new MediaPlayer(); serviceReceiver = new ServiceReceiver(); IntentFilter filter = new IntentFilter(MainActivity.CTL_ACTION); registerReceiver(serviceReceiver,filter); //注册BroadcastReceiver mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { current ++; if(current >=3) current = 0; prepareAndplay(musics[current]); Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION); sendIntent.putExtra("current",current); sendBroadcast(sendIntent); } }); }}
0 0
- 【Android】基于Service组件的简易音乐播放器
- 基于Service的简易音乐播放器
- android 四大组件service 音乐播放器的实现
- Android基于Service服务的音乐播放
- Android开发之基于Service的音乐播放器
- Android开发之基于Service的音乐播放器
- Android开发之基于Service的音乐播放器
- 基于Service的音乐播放器
- android之service音乐简易版播放器
- Android 使用Service实现简易音乐播放器
- Android的简易音乐播放器
- Android简易的音乐播放器实现
- Android 简易的音乐播放器
- Android 简易的音乐播放器
- android 简易音乐播放器的实现
- android----极其简易的音乐播放器(service的使用)
- android简易音乐播放器
- android组件Service控制后台音乐播放
- hdu5634 BestCoder Round #73 (div.1)
- Lowest Common Ancestor
- LAoj 2678 - Subsequence (DP&技巧&排序)
- codeforces-372A
- android WebView 使用总结
- 【Android】基于Service组件的简易音乐播放器
- js打开新页面
- Appium(JAVA)Windows 7系统搭建及示例运行
- uva531
- JAVA 后台计算 经纬度 最短距离
- ThreadLocal可能引起的内存泄露
- 如何选择前端框架?
- 廖雪峰python教程
- Oracle定义DES加密解密及MD5加密函数示例