文档章节

Android 耳机状态监听

k
 kim366
发布于 2016/05/13 19:06
字数 278
阅读 9
收藏 0
点赞 2
评论 0

项目中遇到这样的需求,要求监听耳机插拔状态变化,进行埋点上报处理,把实现代码分享一下。


public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();
    private boolean isHeadsetOn;
    private boolean isRegisteredAudioReceiver = false;
    private BroadcastReceiver INSTANCE;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();
        isHeadsetOn = getAudioState();
        Log.d(TAG, "[ouyangyj] isHeadsetOn = " + isHeadsetOn);
        registerAudioReceiver();
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterAudioReceiver();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    private boolean getAudioState(){
        AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
        return audioManager.isWiredHeadsetOn();
    }

    private void registerAudioReceiver(){
        Log.d(TAG, "[ouyangyj] registerAudioReceiver");
        if(INSTANCE==null){
            INSTANCE = new HeadSetPlugListenner();
        }

        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.HEADSET_PLUG");
        // 或者使用Intent.ACTION_HEADSET_PLUG  if(INSTANCE!=null && !isRegisteredAudioReceiver){
            try{
                registerReceiver(INSTANCE, filter);
                isRegisteredAudioReceiver = true;
            }catch (Throwable throwable){
                Log.d(TAG, "[ouyangyj] register audio receiver error!" + throwable);
            }
        }
    }

    private void unregisterAudioReceiver(){
        Log.d(TAG, "[ouyangyj] unregisterAudioReceiver");
        //使用完毕后,取消注册  if(INSTANCE!=null && isRegisteredAudioReceiver){
            try{
                unregisterReceiver(INSTANCE);
                isRegisteredAudioReceiver = false;
            }catch (Throwable throwable){
                Log.d(TAG, "[ouyangyj] unregister audio receiver error!" + throwable);
            }
        }
    }

    class HeadSetPlugListenner extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.hasExtra("state")) {
                if (intent.getIntExtra("state", 2) == 0){
                    Log.d(TAG, "[ouyangyj] 耳机拔出");
                    //拔出  }else if (intent.getIntExtra("state", 2) == 1) {
                    //插入  Log.d(TAG, "[ouyangyj] 耳机插入");
                }
            }
        }
    }
}

注意点:1、在AndroidManifest.xml文件中添加权限

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
                  2、注册和解注册的位置,根据实际情况做处理,防止内存泄露。

© 著作权归作者所有

共有 人打赏支持
k
粉丝 1
博文 129
码字总数 0
作品 0
朝阳
Android实现蓝牙耳机连接

前言 最近看了下蓝牙耳机连接的问题,查阅了相关资料,再此做一个总结。 本文参考以下链接: Android实现主动连接蓝牙耳机 再次对作者表示感谢。 今天涉及的内容有: 流程讲解 新建广播Bluet...

奔跑的佩恩 ⋅ 05/19 ⋅ 0

Android 解读开源项目UniversalMusicPlayer(播放控制层)

版权声明:本文为博主原创文章,未经博主允许不得转载 源码:AnliaLee/android-UniversalMusicPlayer 首发地址:Anlia_掘金 大家要是看到有错误的地方或者有啥好的建议,欢迎留言评论 前言 ...

Anlia ⋅ 04/29 ⋅ 0

andriod-四大组件之广播Broadcast-短信的收发

我想几乎所有的安卓开发者,第一个接触到的四大组件之一就是activity,而我在之前的文章中也写过, 在activity里面getContext是大佬级别的存在(可以看前几章), 那么四大组件中的广播Broad...

九尾74 ⋅ 05/24 ⋅ 0

Android官方架构组件之LiveData + ViewModel + Room 源码分析一

简单使用案例: MainActivity: MessageViewModel: 其中viewModel.getMessageObserver().observe(this, new Observer() ) 中的this即SupportActivity :LifecycleOwner SupportActivity im......

编程之乐 ⋅ 05/23 ⋅ 0

蓝牙耳机 事件监听 android.intent.action.MEDIA_BUTTON(一)

参考Link: http://blog.csdn.net/kangear/article/details/40430673 http://stackoverflow.com/questions/7573493/keyevent-keycode-media-next-not-received-unless-audio-is-playing Andro......

SamZel ⋅ 2016/01/18 ⋅ 0

Android Transition Animation 过渡动画解析

本文主要译自 lgvalle 的 Material-Animations 的 README.MD,文中的源码见 Material-Animations。 Android 4.4.2 中引入了 Transition 过渡动画,不过那时的 API 的功能比较简单,只能对整个...

JohnnyShieh ⋅ 04/09 ⋅ 0

监听android:drawableLeft和android:drawableRight点击事件

监听android:drawableLeft和android:drawableRight点击事件 Android官方没有提供对android:drawableLeft和android:drawableRight点击事件的监听,但有些情况下,如下面的搜索栏, 需要在用户...

zhangphil ⋅ 04/17 ⋅ 0

Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)

一、前言 app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新版本app。在线更新分为以下几个步骤: 在线更新就上面几个步骤,前2步比较简...

codeGoogle ⋅ 04/28 ⋅ 0

带来手势操作的 Android P beta 发布,Pixel 尝鲜

Google 2018 I/O 大会正在进行,Android P Beta 公测版目前已经发布。 下载地址 >>> https://developer.android.com/preview/download Android P Beta 计划针对 Pixel 手机开放 —— 今天开始......

局长 ⋅ 05/09 ⋅ 4

android软键盘状态监听最稳的方法,属性动画手动调整布局

最近忙于自媒体事业不能自拔,已经很久没有写技术博客了。之所以写是因为这个非常的重要,也非常的好用(软键盘冲突的问题总是非常的让安卓程序员头疼)。先上一张完美的效果图。 大概讲一下...

有态度的互联网人 ⋅ 05/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} cl...

1527 ⋅ 15分钟前 ⋅ 0

SpringCloud(Data Flow)

dataflow-server

赵-猛 ⋅ 25分钟前 ⋅ 0

深入理解Java虚拟机

这本书我读到第8章,之后就是在读不下去了。 读到后面是一种痛苦的体验,太多的东西是不全面的,大量的专有名词是没有解释的,读到最后很多东西仅仅是一个侧面,所以我觉得,这本书不适合初学...

颖伙虫 ⋅ 31分钟前 ⋅ 0

B树和B+树的总结

B树 为什么要B树 磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的...

浮躁的码农 ⋅ 34分钟前 ⋅ 0

NanoPi NEO core/ Ubuntu16.04单网卡配置3个IP地址(2个静态,1个动态)

配置 root@NanoPi-NEO-Core:/etc/network# cat interfacesauto loiface lo inet loopbackallow-hotplug eth0iface eth0 inet static address 172.31.188.249 netmask 255.......

SamXIAO ⋅ 今天 ⋅ 0

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 今天 ⋅ 0

centos7 git安装

由于centos中的源仓库中git不是最新版本,需要进行源码安装。 1、查看yum仓库git信息 [root@iZm5e3d4r5i5ml889vh6esZ zh]# yum info gitLoaded plugins: fastestmirrorLoading mirror s...

xixingzhe ⋅ 今天 ⋅ 0

input file 重复上传同一张图片失效的解决办法

解决办法 方法一:来回切换input[type='file']的type属性值,可以是‘text’,'button','button'....,然后再切换回来‘file’ 方法二:每次取消图片预览后,重置input[type='file']的value的...

时刻在奔跑 ⋅ 今天 ⋅ 0

Mahout推荐算法API详解

前言 用Mahout来构建推荐系统,是一件既简单又困难的事情。简单是因为Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口;困难是因为我们不了解算法细节,很难去根...

xiaomin0322 ⋅ 今天 ⋅ 0

WampServer默认web服务器根目录位置

安装WampServer之后的web服务器根目录默认位置在WampServer安装目录下的www:

临江仙卜算子 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部