Android 耳机状态监听
来源:互联网 发布:亚马逊 云计算 编辑:程序博客网 时间:2024/04/29 21:48
项目中遇到这样的需求,要求监听耳机插拔状态变化,进行埋点上报处理,把实现代码分享一下。
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、注册和解注册的位置,根据实际情况做处理,防止内存泄露。
0 1
- Android 耳机状态监听
- iOS 监听耳机状态
- 耳机监听状态
- 监听耳机拔插状态
- android 耳机按钮监听
- android 耳机按钮监听
- Android耳机按键监听
- android 耳机监听
- android 耳机按钮监听
- Android监听耳机事件
- 在状态栏加入耳机状态监听图标
- 在状态栏加入耳机状态监听图标
- (八)监听耳机插入拔出状态
- android 监听耳机插拔
- Android 实时监听耳机拔除
- Android监听耳机按键事件
- Android监听耳机按键事件
- Android 实时监听耳机拔除
- Effective C++
- Retrofit——Cache
- poj 3463 Sightseeing dij
- AS打包问题
- HDFS 文件操作命令格式与注意事项
- Android 耳机状态监听
- TextView控件基本属性与点击事件的应用
- 最新最全的css规范指南
- java基础学习总结——网络编程
- C ADT 的实现
- 法国Nao机器人如何实现舞蹈同步
- OC3
- 面向对象的开发方法(总结)
- MultiDex 官方教你解决64K方法