如何检测服务和广播接收器中的关键事件

Posted

技术标签:

【中文标题】如何检测服务和广播接收器中的关键事件【英文标题】:How to detect key events in service and broadcast receiver 【发布时间】:2016-07-27 12:04:05 【问题描述】:

当用户按下服务或广播接收器中的各种按钮时,如何获取关键事件?我特别想知道用户何时按下音量按钮,以便我可以在后台触发其他东西,例如录音机。

很遗憾,我的互联网搜索没有产生任何结果。

【问题讨论】:

你试过了吗? 您需要从小处着手,例如什么是广播接收器以及如何启动它。接下来分析录音机样本。 当然。我尝试了我在谷歌上搜索到的每一件事。但不工作! 很抱歉,但试图通过搜索“我需要一个可以启动火箭的设备”来找到解决方案并没有太大帮助。从小处着手,将问题分解为您可以解决的更简单的问题。 只需要一个简单的广播接收器中的代码控制音量键!就是这样 【参考方案1】:

以下内容应该可以工作: 来自官方文档:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"...>
    //code, like activities, etc

    <receiver android:name="com.example.test.VolumeBroadcast" >
        <intent-filter>
           <action android:name="android.intent.action.MEDIA_BUTTON" />
        </intent-filter>
</application>

接收器示例:

  public class VolumeBroadcast extends BroadcastReceiver

      public void onReceive(Context context, Intent intent) 
           //check the intent something like:
           if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) 
              KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
              if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) 
                 // Handle key press.
              
           
      
  

你的注册方式是这样的:

 AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
// Start listening for button presses
am.registerMediaButtonEventReceiver(RemoteControlReceiver); 
// Stop listening for button presses
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);

以下页面:Audio Playback

【讨论】:

什么是 RemoteControlReceiver 以及该文件包含什么?

以上是关于如何检测服务和广播接收器中的关键事件的主要内容,如果未能解决你的问题,请参考以下文章

在android的广播接收器中检测日变化事件

广播接收器不会收到相机事件

如何使用广播接收器检测蓝牙状态变化?

Android广播接收器从短信关键字开始

替换“vpn.connectivity”广播事件

为啥当主应用停止时我的小部件广播接收器服务停止