IT在线教育平台———麦子学院:http://www.maiziedu.com 10.
11. private static String TAG = \12. @Override
13. public void onReceive(Context context, Intent intent) { 14. //获得Action
15. String intentAction = intent.getAction() ; 16. //获得KeyEvent对象 17. KeyEvent keyEvent =
(KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 18.
19. Log.i(TAG, \>\20.
21. if(Intent.ACTION_MEDIA_BUTTON.equals(intentAction)){ 22. //获得按键字节码
23. int keyCode = keyEvent.getKeyCode() ; 24. //按下 / 松开 按钮
25. int keyAction = keyEvent.getAction() ; 26. //获得事件的时间
27. long downtime = keyEvent.getEventTime(); 28.
29. //获取按键码 keyCode
30. StringBuilder sb = new StringBuilder();
31. //这些都是可能的按键码 , 打印出来用户按下的键 32. if(KeyEvent.KEYCODE_MEDIA_NEXT == keyCode){ 33. sb.append(\34. }
35. //说明:当我们按下MEDIA_BUTTON中间按钮时,实际出发的是
KEYCODE_HEADSETHOOK 而不是 KEYCODE_MEDIA_PLAY_PAUSE 36. if(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE ==keyCode){ 37. sb.append(\38. }
39. if(KeyEvent.KEYCODE_HEADSETHOOK == keyCode){ 40. sb.append(\41. }
42. if(KeyEvent.KEYCODE_MEDIA_PREVIOUS ==keyCode){ 43. sb.append(\44. }
IT在线教育平台———麦子学院:http://www.maiziedu.com 45. if(KeyEvent.KEYCODE_MEDIA_STOP ==keyCode){ 46. sb.append(\47. }
48. //输出点击的按键码 49. Log.i(TAG, sb.toString()); 50. 51. } 52. 53. } 54. 55. } 复制代码
2 、England_MBReceiver.java同于China_MBRreceiver ,打印Log TAG= \
3、在AndroidManifest.xml文件定义:
1. android:name=\4. 5.
7. android:name=\10. 11.
4、MainActivity .java 我们通过手动构造一个MEDIA_BUTTON广播去查看我们的MediaButtonReceiver类的打印信息。
1. package com.qin.mediabutton; 2.
3. import android.app.Activity;
4. import android.content.ComponentName; 5. import android.content.Context;
IT在线教育平台———麦子学院:http://www.maiziedu.com 6. import android.content.Intent; 7. import android.media.AudioManager; 8. import android.os.Bundle; 9. import android.view.KeyEvent; 10.
11. public class MainActivity extends Activity { 12. /** Called when the activity is first created. */ 13. @Override
14. public void onCreate(Bundle savedInstanceState) { 15. super.onCreate(savedInstanceState); 16. setContentView(R.layout.main); 17.
18. //由于在模拟器上测试,我们手动发送一个MEDIA_BUTTON的广播,有真机更
好处理了
19. Intent mbIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); 20. //构造一个KeyEvent对象
21. KeyEvent keyEvent = new KeyEvent
(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HEADSETHOOK) ; 22. //作为附加值添加至mbIntent对象中
23. mbIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); 24.
25. //此时China_MBReceiver和England_MBReceiver都会接收到该广播 26. sendBroadcast(mbIntent); 27. 28.
29. AudioManager mAudioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE); 30. //AudioManager注册一个MediaButton对象 31. ComponentName chinaCN = new
ComponentName(getPackageName(),China_MBReceiver.class.getName()); 32. //只有China_MBReceiver能够接收到了,它是出于栈顶的。
33. //不过,在模拟上检测不到这个效果,因为这个广播是我们发送的,流程不是我
们在上面介绍的。
34. mAudioManager.registerMediaButtonEventReceiver(chinaCN); 35. //sendBroadcast(mbIntent,null); 36. }
37. //当一个Activity/Service死去时,我们需要取消这个MediaoButtonReceiver的
注册,如下
IT在线教育平台———麦子学院:http://www.maiziedu.com 38. protected void onDestroy(){ 39. super.onDestroy() ;
40. AudioManager mAudioManager =
(AudioManager)getSystemService(Context.AUDIO_SERVICE); 41. ComponentName chinaCN = new
ComponentName(getPackageName(),China_MBReceiver.class.getName()); 42. //取消注册
43. mAudioManager.unregisterMediaButtonEventReceiver(chinaCN); 44. } 45. } 复制代码
值得注意的一点时,当我们为一个应用程序注册了MediaoButtonReceiver时,在程序离开时,我们需要取消该
MediaoButtonReceiver的注册,在onDestroy()调用
unregisterMediaButtonEventReceiver()方法就OK,这样应用程序之间 的交互就更具逻辑性了。
如需了解更多相关知识,请至麦子学院官网查询(http://www.maiziedu.com/)。