麦子学院Android开发MediaButtonReceiver广播监听器分析

loading 分享 2026-11-13 下载文档

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. 3.

android:name=\4. 5. 6.

7. 9.

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/)。


麦子学院Android开发MediaButtonReceiver广播监听器分析.doc 将本文的Word文档下载到电脑
搜索更多关于: 麦子学院Android开发MediaButtonReceiv 的文档
相关推荐
相关阅读