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
原创粉丝点击