Android监听耳机按键事件
来源:互联网 发布:免费收银软件pfpos 编辑:程序博客网 时间:2024/05/02 19:07
在工作中,我们有时候会处理到耳机按键的逻辑,主要分为两类,一种是短按,一种是长按。
监听耳机的按键事件的方法有两种:
方法一:注册监听Media Button的按键事件
import android.app.Activity;import android.app.ProgressDialog;import android.content.BroadcastReceiver;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.media.AudioManager;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;public class MainActivity extends Activity {private AudioManager mAudioManager;private ComponentName mComponentName;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); // AudioManager注册一个MediaButton对象mComponentName = new ComponentName(getPackageName(), MediaButtonReceiver.class.getName());}@Overrideprotected void onResume() { mAudioManager.registerMediaButtonEventReceiver(mComponentName); registerReceiver(headSetReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG));super.onResume();}@Overrideprotected void onPause() {// 取消注册mAudioManager.unregisterMediaButtonEventReceiver(mComponentName);unregisterReceiver(headSetReceiver);super.onPause();}@Overrideprotected void onDestroy() {mAudioManager = null;mComponentName = null;super.onDestroy();}private final BroadcastReceiver headSetReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(Intent.ACTION_HEADSET_PLUG)) {// phone headset pluggedif (intent.getIntExtra("state", 0) == 1) {// do something//Log.d(TAG, "耳机检测:插入");//Toast.makeText(context, "耳机检测:插入", Toast.LENGTH_SHORT) .show();mAudioManager.registerMediaButtonEventReceiver(mComponentName);// phone head unplugged} else {// do something//Log.d(TAG, "耳机检测:没有插入");//Toast.makeText(context, "耳机检测:没有插入", Toast.LENGTH_SHORT).show();mAudioManager.unregisterMediaButtonEventReceiver(mComponentName);}}}};MediaButtonReceiver.java
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;import android.view.KeyEvent;import android.widget.Toast;public class MediaButtonReceiver extends BroadcastReceiver {private static String TAG = "MediaButtonReceiver";@Overridepublic void onReceive(Context context, Intent intent) {// 获得ActionString intentAction = intent.getAction();// 获得KeyEvent对象KeyEvent keyEvent = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);Log.i(TAG, "Action ---->" + intentAction + " KeyEvent----->"+ keyEvent.toString());// 按下 / 松开 按钮int keyAction = keyEvent.getAction();if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)&& (KeyEvent.ACTION_DOWN == keyAction)) {// 获得按键字节码int keyCode = keyEvent.getKeyCode();// 获得事件的时间// long downtime = keyEvent.getEventTime();// 获取按键码 keyCode//StringBuilder sb = new StringBuilder();//// 这些都是可能的按键码 , 打印出来用户按下的键//if (KeyEvent.KEYCODE_MEDIA_NEXT == keyCode) {//sb.append("KEYCODE_MEDIA_NEXT");//}// 说明:当我们按下MEDIA_BUTTON中间按钮时,实际出发的是 KEYCODE_HEADSETHOOK 而不是// KEYCODE_MEDIA_PLAY_PAUSEif (KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE == keyCode) {//sb.append("KEYCODE_MEDIA_PLAY_PAUSE");}if (KeyEvent.KEYCODE_HEADSETHOOK == keyCode) {//sb.append("KEYCODE_HEADSETHOOK");}if (KeyEvent.KEYCODE_MEDIA_PREVIOUS == keyCode) {//sb.append("KEYCODE_MEDIA_PREVIOUS");}if (KeyEvent.KEYCODE_MEDIA_STOP == keyCode) {//sb.append("KEYCODE_MEDIA_STOP");}// 输出点击的按键码//Log.i(TAG, sb.toString());//Toast.makeText(context, sb.toString(), Toast.LENGTH_SHORT).show();} else if (KeyEvent.ACTION_UP == keyAction) {Log.i("chengjie", "aaa");}}}注意,在AndroidManifest.xml中定义
<receiver android:name="com.lenovo.longexposure.MediaButtonReceiver" > <intent-filter android:priority="2147483647" > <action android:name="android.intent.action.MEDIA_BUTTON" /> </intent-filter> </receiver>
注意这种方法只能监听耳机的短按事件,如果想监听长按事件,请用方法二。
方法二:直接监听onKeyDown方法
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (KeyEvent.KEYCODE_HEADSETHOOK == keyCode) { //按下了耳机键if (event.getRepeatCount() == 0) { //如果长按的话,getRepeatCount值会一直变大//短按} else {//长按}}}
3 1
- Android监听耳机按键事件
- Android监听耳机按键事件
- Android耳机按键监听
- 耳机按键事件的监听
- Android如何监听蓝牙耳机的按键事件
- Android如何监听蓝牙耳机的按键事件
- Android如何监听蓝牙耳机的按键事件
- 【记录】Android监听蓝牙耳机的按键事件
- Android如何监听蓝牙耳机的按键事件
- Android监听耳机事件
- Android 耳机按键与拔插监听
- android按键监听事件
- android耳机中间按键(中键)监听
- 监听耳机事件
- 监听耳机插孔事件
- Android Home键按键事件监听
- Android 监听Home键按键事件
- android 耳机按钮监听
- python文件操作
- HTML中select标签单选多选详解--Js操作Select大全
- hibernate中更新数据库的各种方法以及save和update,saveOrUpdate的各自不同
- URIs, URLs, and URNs
- css link 与@import 异同
- Android监听耳机按键事件
- HDOJ 2222 - Keywords Search 更新AC自动机模板...用类来表示
- shell编程---变量的定义
- DB2 日期字符串转换
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- android ndk 环境
- p51 15
- Parcelable接口
- jquery实现瀑布流并与php实现数据交互