写作背景:最近在做视频播放器,客户提出两项新需求:

插耳机看视频,拔出耳机,视频需要暂停。

视频播放时,按耳机按钮,视频暂停播放;再按耳机按钮,视频暂停。

第一个问题,插耳机看视频时,如何监听到耳机拔出事件然后让视频暂停呢?

------ 在视频播放界面,注册并建立一个BroadcastReceiver,并监听拔除耳机的事件。当接收到耳机拔出事件后,将视频暂停播放即可。

BroadcastReceiver机制介绍

广播发送

Normal broadcasts(普通广播):通过Context.sendBroadcast(intent)方式发送广播。

广播发出后,几乎同时到达多个广播接收者处,广播接收者无法终止广播继续传播。核心代码Example:

Intent intent = new Intent();

intent.setAction("com.action.changestatues");

context.sendBroadcast(intent);

Ordered broadcasts(有序广播):

通过Context.sendOrderedBroadcast(intent,null)发送广播;

通过abortBroadcast()终止广播;

广播接收者通过设置优先级来决定谁可以先接收到广播,优先级数值范围为-1000~1000。优先级通过在AndroidManifest.xml中设置。优先级高的接收者在接收到广播后,可以对广播进行处理,比如:终止广播继续传递,或向广播中添加数据继续传递给下一个接收者等。核心代码Example:

Intent intent = new Intent();

intent.setAction("com.action.changestatues");

context.sendOrderedBroadcast(intent,null);

** 广播接收**

广播接收者,就是负责接收和处理广播的类,该类继承BroadcastReceiver类,并重写

public void onReceive(Context context,Intent intent)方法,其中intent可以获得广播传递的数据;通过intent.getAction()可以得到广播intent设置的Action。比如,某个广播发送的Action为"android.intent.action.MEDIA_BUTTON",则所有在AndroidManifest.xml中设置过的广播接收者都能够接收到该广播。

广播注册和广播注销

如果需要在某个类中实现广播的接收,就有需要用到广播的注册和注销。这里需要注意的是,注册的广播要在不使用的情况下注销掉。如果在Activity.onResume()方法中进行了注册,需要在Activity.onPause()方法中进行注销。为了节省系统开销,当Activity处于暂停状态时,不会接收到广播。广播注册和接收的位置视具体情况而定。

核心代码Example:

private BroadcastReceiver mReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if ( action.equals(ALARM_ALERT)) {

//闹铃想起时,可以暂停视频或做其他事情

doFirstthing();

} else if (action.equals(Intent.ACTION_SCREEN_OFF)) {

//屏幕锁定时,可以暂停视频播放或做其他事情

doSecondthing();

}else if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {

//耳机拔出时,可以暂停视频播放或做其他事情

doOtherthing();

}

}

};

@Override

public void onResume() {

super.onResume();

//注册广播接收器,给广播接收器添加可以接收的广播Action

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_SCREEN_OFF);

filter.addAction(ALARM_ALERT);

filter.addAction(AudioManager.ACTION_AUDIO_BECOMING_NOISY);

registerReceiver(mReceiver, filter);

}

@Override

protected void onPause() {

//注销广播

unregisterReceiver(mReceiver);

super.onStop();

}

AudioManager.ACTION_AUDIO_BECOMING_NOISY介绍

广播intent,提示应用程序音频信号由于音频输出的变化将变得“嘈杂”。

例如,当拔出一个有线耳机,或断开一个支持A2DP的音频接收器,这个intent就会被发送,且音频系统将自动切换音频线路到扬声器。收到这个intent后,控制音频流的应用程序会考虑暂停,减小音量或其他措施,以免扬声器的声音使用户惊奇。

至此,第一个需求已经完成,感谢收看!

END

如果你一不小心,已经看完了,恭喜你,并没有彩蛋。

我只能祝福你成为

一个年轻的梦想者,

热爱代码,

不受束缚!

android之broadcastreceiver 耳机按键,Android BroadcastReceiver 实时监听耳机拔出事件相关推荐

  1. android之broadcastreceiver 耳机按键,Android 实时监听耳机按钮事件

    写作背景:最近在做视频播放器,客户提出两项新需求: 插耳机看视频,拔出耳机,视频需要暂停.(Android 实时监听耳机拔出事件) 视频播放时,按耳机按钮,视频暂停播放:再按耳机按钮,视频暂停. 如何 ...

  2. android耳机上报流程,Android系统中耳机按键键值上报不正确 解决过程

    [问题现象] 根据测试组同事反馈:在我们的设备上使用 JBL 品牌某款带有 3 个按键的有线耳机时,按下"音量+"键时设备会减小音量而不是增加音量,按下"音量-" ...

  3. android dialog隐藏虚拟按键,Android应用开发之Android dialog 去除虚拟按键的解决方法...

    本文将带你了解Android应用开发Android dialog 去除虚拟按键的解决方法,希望本文对大家学Android有所帮助. Android   部分机型没有物理按键,只有虚拟按键,Activi ...

  4. android 窗口监听按键,Android编程实现Dialog窗体监听的方法

    本文实例讲述了Android编程实现Dialog窗体监听的方法.分享给大家供大家参考,具体如下: 今天做了一个Dialong窗体监听包括窗体内的xml监听. 效果图: test.class代码 pac ...

  5. 聊聊iOS开发中耳机的那点事(监听耳机拔插、耳机线控)-b

    如果说一个项目出现的最重大的事故,那无疑就是开发人员使用了不可控的元素. 前言 iOS开发当中有关于视音频播放的开发不在少数,用户时常会使用到一种输出设备,那就是"耳机",这一篇博 ...

  6. 聊聊iOS开发中耳机的那点事(监听耳机拔插、耳机线控)

    如果说一个项目出现的最重大的事故,那无疑就是开发人员使用了不可控的元素. 前言 iOS开发当中有关于视音频播放的开发不在少数,用户时常会使用到一种输出设备,那就是"耳机",这一篇博 ...

  7. android 拦截耳机按键,Android耳机监测以及耳机按键监测

    最近在做Marvell的项目,碰到个耳机热插拔的问题,所以顺便看了下相关代码,这里来贡献一下给大家. 我们这里以PXA的代码为例,整个框架比较的简单清晰,上层是分别是HeadsetObserver.j ...

  8. Android隐藏导航栏按键,Android如何控制导航栏单个按键的显隐状态

    我们都知道Android系统的导航栏通常有三个按键,分别是BACK, HOME, APP_SWITCH. 网上很多有关导航栏和状态栏显隐的文章,但几乎都是控制导航栏或状态栏所有按键同时显示或消失,如果 ...

  9. Android 实时监听耳机拔除

    最近,项目了有这么一个工作需求,当用户正在使用我们产品里提供的音乐播放器播放音乐时,用户把耳机或者蓝牙耳机接入后,过一会儿,用户又把耳机给拔除,或者断开蓝牙耳机的连接,我们需要暂停播放音乐, goog ...

最新文章

  1. 镗孔指令g76格式_钻孔、镗孔、攻丝,11个固定循环详解!
  2. 攻防世界-web-fakebook-从0到1的解题历程writeup
  3. layer 线上_LAYER
  4. 操作class属性的新API--classList
  5. C++动态类型与静态类型
  6. C# 创建单例你会几种方式?
  7. hexo version control
  8. 土豆聊天poeato Chat注册账号时提示网络刺错误怎么解决
  9. 8款主流Scrum敏捷开发工具评测,建议先马后看!
  10. CDH/HDP迁移之路
  11. 【数据库】Redis
  12. MySQL数据库企业级应用实践
  13. IDC机房动力环境设备维护
  14. Oracle使用json后乱码,nodejs读取本地中文json文件出现乱码解决方法
  15. python gui 显示表格_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...
  16. 如何才能开发一个靠谱的供应商?
  17. iOS笔记-performSelector的探索
  18. Android实现自定义圆角边框渐变
  19. ORACLE学习笔记-关于索引和约束
  20. 关于数组的对象获取及排序问题/小程序的多层页面返回问题

热门文章

  1. 区块链Fabric 技术架构和交易流程
  2. 忆享科技聚焦|数字中国发展报告、政务云市场规模、网络安全、中小企业数字化……近期热点资讯一览
  3. 网络规划设计师上午真题及解析(2019)
  4. linux 命令连接符,Linux 中命令链接操作符的十个最佳实例
  5. 量化策略篇:股票多头策略、CTA策略、期权策略
  6. 闪光网-彭亮《学后感——彭亮总结》
  7. 实现Taro 项目拆分到多个分包(Taro和原生混合开发)
  8. DAVSE VCC-H10004K超高清会议摄像机
  9. 汽车鸿蒙音响怎么调,汽车音响怎么调试 汽车音响调试步骤方法【详细介绍】...
  10. python爬山算法