文档章节

Android 耳机状态监听

k
 kim366
发布于 2016/05/13 19:06
字数 278
阅读 10
收藏 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、注册和解注册的位置,根据实际情况做处理,防止内存泄露。

本文转载自:http://blog.csdn.net/oyangyujun/article/details/51316120

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

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

奔跑的佩恩
05/19
0
0
Android各系统版本应用程序内接听电话功能的实现

目前公司项目遇到的问题,急需大牛前来解决,应用内容大概为:Android应用监听来电,收到来电后弹出应用内自定义的来电界面(Activity),通过界面上的接听按钮接通来电。 问题如下: 1.部分...

杨文浩
08/02
0
0
android开发 可不可以监听蓝牙耳机调音量的两个按键?

android开发 可不可以监听蓝牙耳机调音量的两个按键?

Cao_qingchun
2012/08/24
1K
1
Android 安全模式惊曝新漏洞

Android安全模式惊曝新漏洞:黑客可将任何合法应用转换成恶意木马 企业安全公司Bluebox在谷歌Android安全模式中发现一个新的安全漏洞,过去4年内发布的所有Android设备都受到它的影响。受到这...

oschina
2013/07/05
3.5K
28
Android 解读开源项目UniversalMusicPlayer(播放控制层)

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

Anlia
04/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Nginx-使用简单总结

下载nginx:http://nginx.org/en/download.html 下载后解压 有很多种方法启动nginx (1)直接双击nginx.exe, 双击后一个黑色的弹窗一闪而过 (2)打开cmd命令窗口,切换到nginx解压目录下, 输入...

Java搬砖工程师
14分钟前
3
0
通过修改控制文件scn推进数据库scn

在数据库遇到ora-600[2662],scn不一致(又没有日志)的时候,我们首先想到的就是去推进数据库的scn,让数据库能够open起来,抢救其中的数据,但是由于各种乱用的情况,oraclescn的pach出来后(11.2...

突突突酱
15分钟前
1
0
Underscore _.template 方法使用详解

https://github.com/hanzichi/underscore-analysis/issues/26 前文 浅谈 Web 中前后端模板引擎的使用 我们简单了解了模板引擎在前后端的应用场景,本文重点深入 Underscore 的模板函数 _.te...

壹峰
16分钟前
1
0
前端缩短数字的长度解决方案[10进制转化为64进制]

function string10to64 (number) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$'.split(''), radix = chars.length, qutient =......

未来cc
17分钟前
1
0
十年架构师不到400行手写一个Spring MVC

首先,我们先来介绍一下Spring的三个阶段,配置阶段、初始化阶段和运行阶段(如图): 配置阶段:主要是完成application.xml配置和Annotation配置。 初始化阶段:主要是加载并解析配置信息,...

小刀爱编程
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部