android监听耳机,Android监听耳机按键事件
在工作中,我们有时候会处理到耳机按键的逻辑,主要分为两类,一种是短按,一种是长按。
监听耳机的按键事件的方法有两种:
方法一:注册监听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;
@Override
protected 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());
}
@Override
protected void onResume() {
mAudioManager.registerMediaButtonEventReceiver(mComponentName);
registerReceiver(headSetReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
super.onResume();
}
@Override
protected void onPause() {
// 取消注册
mAudioManager.unregisterMediaButtonEventReceiver(mComponentName);
unregisterReceiver(headSetReceiver);
super.onPause();
}
@Override
protected void onDestroy() {
mAudioManager = null;
mComponentName = null;
super.onDestroy();
}
private final BroadcastReceiver headSetReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_HEADSET_PLUG)) {
// phone headset plugged
if (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.javaimport 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";
@Override
public void onReceive(Context context, Intent intent) {
// 获得Action
String 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_PAUSE
if (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中定义
注意这种方法只能监听耳机的短按事件,如果想监听长按事件,请用方法二。
方法二:直接监听onKeyDown方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (KeyEvent.KEYCODE_HEADSETHOOK == keyCode) { //按下了耳机键
if (event.getRepeatCount() == 0) { //如果长按的话,getRepeatCount值会一直变大
//短按
} else {
//长按
}
}
}
原文:http://blog.csdn.net/shineflowers/article/details/44857549
android监听耳机,Android监听耳机按键事件相关推荐
- Android APP:检测实体按键事件
Android APP:检测实体按键事件 一.检测点击按键事件一般不对手机上的输入按键进行处理,直接由系统按照默认情况操作.当然有时为了改善用户体验,需要让应用拦截按键事件,并进行额外处理. 要想监控 ...
- android gridview 按钮事件处理,Android TV gridview 的按键事件响应巧变 事件分发机制...
在gridview点击事件之后,打log看了下, 看到gridview的onclick事件响应的竟然排在onkeyup之后,这造成100~200ms的延迟啊, 后来换了在其它响应事件里面截取,但是在o ...
- Android 监听Home键按键事件
Android 监听Home键按键事件 标签(空格分隔):Android Home键 在Android开发中有很多按键事件需要在App中捕获从而做出一些针对性的操作,例如返回键,音量键等都可以直接在d ...
- Android按键事件——上层与驱动的映射
http://blog.csdn.net/zengdaquan007/article/details/8686431 首先查看android对上层按键事件的定义,在头文件<KeycodeLabe ...
- android 原生按键事件触发
在项目中遇到了这样的问题,系统层修改了android原生逻辑,按键事件有mcu直接上报,没有走android原生的事件分发流程,因此不会触发onKeyDown/onKeyUp方法的回调,可以使用如下方 ...
- Android事件处理之处理键盘事件
1.在Android开发中,首先和用户交互的是界面,接着就是事件处理,对于如今的图形界面应用程序,都是通过事件来实现人机交互的.事件就是用户对图形界面的操作,在Android手机和平板电脑上,主要包括 ...
- android自动屏幕点击事件,Android 中屏幕点击事件的实现
在android下,事件的发生是在监听器下进行,android系统可以响应按键事件和触摸屏事件,事件说明如下: 常用实现OnClickListener,OnTouchListener,OnFocusC ...
- Android后台监听耳机(线控、蓝牙)按键事件
在Activity中重写onKeyDown.onKeyUp这些方法只适用于APP在前台的情况,如果将APP切换到后台就失效了. 经过网上一番摸索.读源码,终于把这个功能整出来了,说一下我的实现过程. ...
- Android系统中自定义按键的短按、双击、长按事件
在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1.单击 ...
最新文章
- 相持不下的争论:脑波,有用吗?
- AI:**消灭程序员需要一百年吗?
- Android系统中通过shell命令实现wifi的连接控制
- SAP自学指南:案例公司的SAP解决方案
- Java 中 notify 和 notifyAll 有什么区别?
- mac使用allure_制作测试报告,allure,生成
- eclipse中git分支创建与合并(-)
- 彻底理解python3的编码和解码过程
- win10设置任务栏全透明、免安装第三方软件
- linux网盘客户端,Linux下的百度网盘客户端BaiduPCS-Go
- 《软件测试》第十二章 文档测试
- 招生啦!清华大学SIGS人工智能硕士项目2021年硕士研究生普通招考说明
- 第五人格服务器维护中请稍后登录,第五人格:国际服维护重大故障,刚开精华二,却登录不了游戏...
- git第一次提交代码到远程仓库
- 如何判断外汇平台是否整个?MT4外汇投资靠谱吗?
- 中国剩余定理(也叫孙子定理)
- spring-session(一)揭秘
- h5页面苹果手机不兼容普通点击事件
- 南京python周末培训
- 漫谈程序员系列:快来约这些女生,保你脱单
热门文章
- c语言cast的用法,static_cast 用法
- 深度探索Hyperledger技术与应用之超级账本的典型交易流程
- 关于数据安全及保密(基于大数据板块的整理)
- Nginx的介绍与使用
- linux运维是做什么工作的?有哪些岗位?
- 服务器sata硬盘安装系统,#####SATA、RAID、SCSI硬盘用U盘安装原版XP、2003系统######支持服务器硬盘!...
- call指令和ret指令【笔记+详解】
- JS邮箱验证_手机号码验证_电话号码验证-正则验证
- 安卓开发必备知识体系:Java篇
- 在本地如何启动Vue项目