简聆APP开发持续进行中......
这一次加入一个小功能
需求是这样的:
当用户正在使用耳机听歌时,
耳机被拔出时音乐暂停播放
耳机再次插入时音乐从暂停的位置播放。
其实这个功能是很有必要的。
比如一些人在公共场所听歌
耳机突然拔出来了,自己听的歌被大声放出开
这样子是比较尴尬的。
所以设计了这样一个小功能
具体实现如下:
首先在主页监听耳机状态广播
和上一章一样,因为主页是不会被finish掉的
所以选择在主页进行监听
//监听耳机状态的广播 private BroadcastReceiver headsetReceiver;
headsetReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_HEADSET_PLUG.equals(intent.getAction())) { if (intent.hasExtra("state")) { int state = intent.getIntExtra("state", 0); Intent intentstate = new Intent("intentstate"); if (state == 1) { intentstate.putExtra("state", 1); } else if (state == 0) { intentstate.putExtra("state", 0); } //发送耳机状态广播 localBroadcastManager.sendBroadcast(intentstate); } } } }; IntentFilter headintentFilter = new IntentFilter(); headintentFilter.addAction(Intent.ACTION_HEADSET_PLUG); registerReceiver(headsetReceiver, headintentFilter); }
记得写取消注册
@Override protected void onDestroy() { super.onDestroy(); //取消注册屏幕状态广播 unregisterReceiver(mOnepxReceiver); if (headsetReceiver != null) { //取消注册耳机监听广播 unregisterReceiver(headsetReceiver); } }
可以看到,主页这边接受到广播后,立马发送了出去
这时候就需要在音乐播放界面进行接收了。
case "intentstate"://耳机状态广播 int state = intent.getIntExtra("state", -1); if (state != -1) { if (state == 1) { // Toast.makeText(context, "插入耳机", Toast.LENGTH_SHORT).show(); if (index != -1) {//判断是不是第一次进入 //播放 if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); timer();//开启定时器 } } } else if (state == 0) { // Toast.makeText(context, "拔出耳机", Toast.LENGTH_SHORT).show(); //暂停 if (index != -1) { if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); } } } }
这样这个小小的功能就实现了。