android 线控操作
转自:http://blog.csdn.net/buleriver/article/details/6883234
实现原理:通过广播拦截来实现。
(一)定义1个广播拦截器,用来拦截线控耳机按键产生的广播事件。
![](http://stephen830.iteye.com/images/icon_star.png)
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.util.Log;
- import android.view.KeyEvent;
- public class MediaButtonReceiver extends BroadcastReceiver {
- /**
- * Handler
- */
- private Handler handler;
- /**
- * 构造器.
- * @param handler
- */
- public MediaButtonReceiver(Handler handler) {
- this.handler = handler;
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- boolean isActionMediaButton = Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction());
- if(!isActionMediaButton) return;
- KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
- if(event==null) return;
- boolean isActionUp = (event.getAction()==KeyEvent.ACTION_UP);
- if(!isActionUp) return;
- int keyCode = event.getKeyCode();
- long eventTime = event.getEventTime()-event.getDownTime();//按键按下到松开的时长
- Message msg = Message.obtain();
- msg.what = 100;
- Bundle data = new Bundle();
- data.putInt("key_code", keyCode);
- data.putLong("event_time", eventTime);
- msg.setData(data);
- handler.sendMessage(msg);
- //终止广播(不让别的程序收到此广播,免受干扰)
- abortBroadcast();
- }
- }
(二)在主程序的处理:
(1)定义并注册广播服务
![](http://stephen830.iteye.com/images/icon_star.png)
- //初始化Handler对象
- MyHandler handler = new MyHandler();
- //初始化媒体(耳机)广播对象.
- MediaButtonReceiver mediaButtonReceiver = new MediaButtonReceiver(handler);
- //注册媒体(耳机)广播对象
- IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
- intentFilter.setPriority(100);
- registerReceiver(mediaButtonReceiver, intentFilter);
(2)定义MyHandler和处理广播发回的消息:
![](http://stephen830.iteye.com/images/icon_star.png)
- private class MyHandler extends Handler{
- @Override
- public void handleMessage(Message msg) {
- int what = msg.what;
- switch(what){
- case 100://单击按键广播
- Bundle data = msg.getData();
- //按键值
- int keyCode = data.getInt("key_code");
- //按键时长
- long eventTime = data.getLong("event_time");
- //设置超过2000毫秒,就触发长按事件
- boolean isLongPress = (eventTime>2000);
- switch(keyCode){
- case KeyEvent.KEYCODE_HEADSETHOOK://播放或暂停
- case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE://播放或暂停
- playOrPause();
- break;
- //短按=播放下一首音乐,长按=当前音乐快进
- case KeyEvent.KEYCODE_MEDIA_NEXT:
- if(isLongPress){
- fastNext(1);//自定义
- }else{
- playNext();//自定义
- }
- break;
- //短按=播放上一首音乐,长按=当前音乐快退
- case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
- if(isLongPress){
- fastPrevious(1);//自定义
- }else{
- playPrevious();//自定义
- }
- break;
- }
- break;
- default://其他消息-则扔回上层处理
- super.handleMessage(msg);
- }
- }
- }
(3)应用程序退出的时候,别忘了取消注册的广播拦截器。
![](http://stephen830.iteye.com/images/icon_star.png)
- unregisterReceiver(mediaButtonReceiver);
android 线控操作相关推荐
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...
- 传说中的“群控”!云控群控、线控群控到底是什么?
传说中的"群控"--云控群控.线控群控到底是什么? 前言 随着市场发展和人力成本的提高,公司会安装各种提高工作效率的软件.比如微商的出现就催生了多控系统软件的诞生,我们一般称作&q ...
- iOS 滑动浏览图片 捏合缩小放大 音量线控
iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件.远程控 ...
- iOS事件全面解析 (触摸事件、手势识别、摇晃事件、耳机线控)
-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...
- iOS:触摸事件、手势识别、摇晃事件、耳机线控
概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件. ...
- 触摸事件、手势识别、摇晃事件、耳机线控
概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件. ...
- 转载大神IOS开发系列【9】--触摸事件、手势识别、摇晃事件、耳机线控
转载自:http://www.cnblogs.com/kenshincui/p/3950646.html 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以 ...
- Android耳机线控-播放/暂停/上一曲/下一曲
起因 前一阵子完成了用有线耳机控制Android手机App的音频播放,具体实现了用耳机线的按键完成播放.暂停.上一曲.下一曲的功能.在网上查阅了一些资料,但不是特别尽如人意,记得有一篇写的很不错的这方 ...
- Android耳机线控详解,蓝牙耳机按钮监听(仿酷狗线控效果)
转载请注明出处:http://blog.csdn.net/fengyuzhengfan/article/details/46461253 当耳机的媒体按键被单击后,Android系统会发出一个广播,该 ...
最新文章
- java 底层方法_底层方法测试--【Java】
- res2net 测试
- SQL having 子句示例 - 使用Sqlite演示
- 自动切换电脑或手机版(php aspx),ASP程序自动判断是电脑或手机访问网站。
- ArcGIS支持的常用数据类型
- windows下phpstorm的常用快捷键及使用技巧
- 023-数据结构与算法系列
- Mail.Ru Cup 2018 Round 3
- 关于循环经济的三维展示
- jquery 之简单好用的分页插件的使用方法 jQuery分页插件pageGroup.js
- Android计算器效果截图,Android复杂计算器实现
- 禁止搜索引擎收录网站内容,百度,谷歌,所有等...
- Android 手把手教你实现百度身份证识别
- 仿射密码加密解密实现
- Unity与Android Studio互相调用
- 运维监控工具之商用软件篇
- 如何用Python代码发一个炫酷的朋友圈
- 【技术白皮书】第二章:文本检测与识别技术发展历程
- STM8单片机驱动TM1628的示例程序
- iOS: UIBezierPath简介及静态图形实现