文档章节

Android 耳机状态监听

k
 kim366
发布于 2016/05/13 19:06
字数 278
阅读 9
收藏 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应用监听来电,收到来电后弹出应用内自定义的来电界面(Activity),通过界面上的接听按钮接通来电。 问题如下: 1.部分...

杨文浩
08/02
0
0
Android实现蓝牙耳机连接

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

奔跑的佩恩
05/19
0
0
Android 解读开源项目UniversalMusicPlayer(播放控制层)

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

Anlia
04/29
0
0
Android监听耳机是否插入

Android系统中,当插入耳机或者拔出耳机,会发出一个广播。 这个广播必须是在代码里面注册Receiver才有效,在xml中添加intentfilter没效。

Nov_Eleven
2014/11/10
0
0
andriod-四大组件之广播Broadcast-短信的收发

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

九尾74
05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Maven 项目中依赖的搜索顺序

ettings_mirror 的优先级高于 central settings_profile_repo 优先级高于 settings_mirror settings_profile_repo 优先级高于 pom_repositories settings_profile_repo 优先级高于 pom_prof......

xingyu4j
11分钟前
1
0
改变maven项目的名称

pom.xml <groupId>com.soft.xxx</groupId><artifactId>xxx</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>xxx Maven Webapp</name><build>......

1713716445
13分钟前
2
0
windows下按照RabbitMQ

rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平...

zhaochaochao
13分钟前
2
0
10个PHP比特币开源项目

如果你是一个Phper,如果你希望学习区块链,那么本文列出的10个开源的Php比特币项目,将有助于你了解在自己的应用中如何加入对比特币的支持。 如果你希望快速掌握使用Php对接比特币钱包的方法...

笔阁
20分钟前
10
0
MyBatis级联探讨

数据模型 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper name......

职业搬砖20年
24分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部