Android 耳机状态监听
2016-05-04 16:43
477 查看
项目中遇到这样的需求,要求监听耳机插拔状态变化,进行埋点上报处理,把实现代码分享一下。
注意点:1、在AndroidManifest.xml文件中添加权限
2、注册和解注册的位置,根据实际情况做处理,防止内存泄露。
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、注册和解注册的位置,根据实际情况做处理,防止内存泄露。
相关文章推荐
- 提升Android应用视觉吸引效果的10个UI设计技巧
- 基于Android"今日事今日毕"的使用介绍
- 开发人员和设计师应该安装的10个Android应用
- 你的Android应用完全不需要那么多的权限
- Android应用如何开机自启动、自启动失败原因
- android获取mac地址
- Android学习资料
- 对抗Android逆向
- Android逆向分析学习与研究(1)————工欲善其事必先利其器
- android经典Demo
- android之service简介
- android进程优先级
- Android平台应用开发笔记(一)
- Android学习03
- Android访问网页
- WebView的简单用法
- 使用标准库里的fragment
- Android如何得到电量、温度、电压
- Fragement
- Android应用源码安卓局域网飞鸽传输项目