转自:http://blog.csdn.net/buleriver/article/details/6883234

实现原理:通过广播拦截来实现。

(一)定义1个广播拦截器,用来拦截线控耳机按键产生的广播事件。

Java代码  
  1. import android.content.BroadcastReceiver;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.os.Message;
  7. import android.util.Log;
  8. import android.view.KeyEvent;
  9. public class MediaButtonReceiver extends BroadcastReceiver {
  10. /**
  11. * Handler
  12. */
  13. private Handler handler;
  14. /**
  15. * 构造器.
  16. * @param handler
  17. */
  18. public MediaButtonReceiver(Handler handler) {
  19. this.handler = handler;
  20. }
  21. @Override
  22. public void onReceive(Context context, Intent intent) {
  23. boolean isActionMediaButton = Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction());
  24. if(!isActionMediaButton) return;
  25. KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
  26. if(event==null) return;
  27. boolean isActionUp = (event.getAction()==KeyEvent.ACTION_UP);
  28. if(!isActionUp) return;
  29. int keyCode = event.getKeyCode();
  30. long eventTime = event.getEventTime()-event.getDownTime();//按键按下到松开的时长
  31. Message msg = Message.obtain();
  32. msg.what = 100;
  33. Bundle data = new Bundle();
  34. data.putInt("key_code", keyCode);
  35. data.putLong("event_time", eventTime);
  36. msg.setData(data);
  37. handler.sendMessage(msg);
  38. //终止广播(不让别的程序收到此广播,免受干扰)
  39. abortBroadcast();
  40. }
  41. }

(二)在主程序的处理:

(1)定义并注册广播服务

Java代码  
  1. //初始化Handler对象
  2. MyHandler handler = new MyHandler();
  3. //初始化媒体(耳机)广播对象.
  4. MediaButtonReceiver mediaButtonReceiver = new MediaButtonReceiver(handler);
  5. //注册媒体(耳机)广播对象
  6. IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
  7. intentFilter.setPriority(100);
  8. registerReceiver(mediaButtonReceiver, intentFilter);

(2)定义MyHandler和处理广播发回的消息:

Java代码  
  1. private class MyHandler extends Handler{
  2. @Override
  3. public void handleMessage(Message msg) {
  4. int what = msg.what;
  5. switch(what){
  6. case 100://单击按键广播
  7. Bundle data = msg.getData();
  8. //按键值
  9. int keyCode = data.getInt("key_code");
  10. //按键时长
  11. long eventTime = data.getLong("event_time");
  12. //设置超过2000毫秒,就触发长按事件
  13. boolean isLongPress = (eventTime>2000);
  14. switch(keyCode){
  15. case KeyEvent.KEYCODE_HEADSETHOOK://播放或暂停
  16. case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE://播放或暂停
  17. playOrPause();
  18. break;
  19. //短按=播放下一首音乐,长按=当前音乐快进
  20. case KeyEvent.KEYCODE_MEDIA_NEXT:
  21. if(isLongPress){
  22. fastNext(1);//自定义
  23. }else{
  24. playNext();//自定义
  25. }
  26. break;
  27. //短按=播放上一首音乐,长按=当前音乐快退
  28. case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
  29. if(isLongPress){
  30. fastPrevious(1);//自定义
  31. }else{
  32. playPrevious();//自定义
  33. }
  34. break;
  35. }
  36. break;
  37. default://其他消息-则扔回上层处理
  38. super.handleMessage(msg);
  39. }
  40. }
  41. }

(3)应用程序退出的时候,别忘了取消注册的广播拦截器。

Java代码  
  1. unregisterReceiver(mediaButtonReceiver);

android 线控操作相关推荐

  1. iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

    -- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...

  2. 传说中的“群控”!云控群控、线控群控到底是什么?

    传说中的"群控"--云控群控.线控群控到底是什么? 前言 随着市场发展和人力成本的提高,公司会安装各种提高工作效率的软件.比如微商的出现就催生了多控系统软件的诞生,我们一般称作&q ...

  3. iOS 滑动浏览图片 捏合缩小放大 音量线控

    iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件.远程控 ...

  4. iOS事件全面解析 (触摸事件、手势识别、摇晃事件、耳机线控)

    -- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...

  5. iOS:触摸事件、手势识别、摇晃事件、耳机线控

    概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件. ...

  6. 触摸事件、手势识别、摇晃事件、耳机线控

    概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件. ...

  7. 转载大神IOS开发系列【9】--触摸事件、手势识别、摇晃事件、耳机线控

    转载自:http://www.cnblogs.com/kenshincui/p/3950646.html 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以 ...

  8. Android耳机线控-播放/暂停/上一曲/下一曲

    起因 前一阵子完成了用有线耳机控制Android手机App的音频播放,具体实现了用耳机线的按键完成播放.暂停.上一曲.下一曲的功能.在网上查阅了一些资料,但不是特别尽如人意,记得有一篇写的很不错的这方 ...

  9. Android耳机线控详解,蓝牙耳机按钮监听(仿酷狗线控效果)

    转载请注明出处:http://blog.csdn.net/fengyuzhengfan/article/details/46461253 当耳机的媒体按键被单击后,Android系统会发出一个广播,该 ...

最新文章

  1. java 底层方法_底层方法测试--【Java】
  2. res2net 测试
  3. SQL having 子句示例 - 使用Sqlite演示
  4. 自动切换电脑或手机版(php aspx),ASP程序自动判断是电脑或手机访问网站。
  5. ArcGIS支持的常用数据类型
  6. windows下phpstorm的常用快捷键及使用技巧
  7. 023-数据结构与算法系列
  8. Mail.Ru Cup 2018 Round 3
  9. 关于循环经济的三维展示
  10. jquery 之简单好用的分页插件的使用方法 jQuery分页插件pageGroup.js
  11. Android计算器效果截图,Android复杂计算器实现
  12. 禁止搜索引擎收录网站内容,百度,谷歌,所有等...
  13. Android 手把手教你实现百度身份证识别
  14. 仿射密码加密解密实现
  15. Unity与Android Studio互相调用
  16. 运维监控工具之商用软件篇
  17. 如何用Python代码发一个炫酷的朋友圈
  18. 【技术白皮书】第二章:文本检测与识别技术发展历程
  19. STM8单片机驱动TM1628的示例程序
  20. iOS: UIBezierPath简介及静态图形实现

热门文章

  1. 修行人夫妻关系处理不好,过不下去还离不了,怎么办?
  2. 基于matlab的z-score标准化方法处理数据
  3. SAP报表报错CX_SY_ARITHMETIC_OVERFLOW
  4. 为什么火车站旁边的肯德基能挤死中餐馆?
  5. 2023年浙江建筑八大员(市政质量员)考试试题题库及答案
  6. 用什么让前段与mysql连接_如何将前端网页与后台数据库连接?
  7. Xmind8破解教程
  8. as使用Git指令远程或者本地创库代码合并
  9. r语言如何读取matlab数据类型,R语言数据类型深入详解
  10. 贵金属吸附树脂,吸附金的材料,钯吸附树脂