實時監聽耳機拔除

當用戶正在使用咱們產品裏提供的音樂播放器播放音樂時,用戶把耳機或者藍牙耳機接入後,過一下子,用戶又把耳機給拔除,或者斷開藍牙耳機的鏈接,咱們須要暫停播放音樂,定義一個BroadcastReceiver對象,  對於有線耳機,監聽Intent.ACTION_HEADSET_PLUG系統廣播,對於藍牙耳機,監聽BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED系統廣播android

1ide

2spa

3.net

4code

5對象

6事件

7ci

8get

9產品

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

private void registerHeadsetPlugReceiver() {   

        IntentFilter intentFilter = new IntentFilter();   

        intentFilter.addAction("android.intent.action.HEADSET_PLUG");   

        registerReceiver(headsetPlugReceiver, intentFilter);  

           

        // for bluetooth headset connection receiver 

        IntentFilter bluetoothFilter = new IntentFilter(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED); 

        registerReceiver(headsetPlugReceiver, bluetoothFilter); 

    

       

    private BroadcastReceiver headsetPlugReceiver = new BroadcastReceiver() { 

   

        @Override 

        public void onReceive(Context context, Intent intent) { 

               

            String action = intent.getAction(); 

            if (BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED.equals(action)) { 

                BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); 

                if(BluetoothProfile.STATE_DISCONNECTED == adapter.getProfileConnectionState(BluetoothProfile.HEADSET)) { 

                    //Bluetooth headset is now disconnected 

                    handleHeadsetDisconnected(); 

                

            } else if ("android.intent.action.HEADSET_PLUG".equals(action)) { 

                if (intent.hasExtra("state")) { 

                    if (intent.getIntExtra("state", 0) == 0) { 

                        handleHeadsetDisconnected(); 

                    

                

            

        

           

    }; 

 這樣作能夠基本知足需求,但不完美,由於當拔出有線耳機時,播放器不會立刻暫停,要等上一秒鐘,纔會收到Android的系統廣播,

1

android.intent.action.HEADSET_PLUG,他說其餘音樂播放器沒有這個延遲,通過調查發現,QQ音樂確實沒有這個延遲,耳機一拔,播放器馬上暫停, 

 

相關資料:從硬件層面來看,直接監聽耳機拔出事件不難,耳機的拔出和插入,會引發手機電平的變化,而後觸發什麼什麼中斷,

最終在stack overflow找到答案,監聽Android的系統廣播AudioManager.ACTION_AUDIO_BECOMING_NOISY, 可是這個廣播只是針對有線耳機,或者無線耳機的手機斷開鏈接的事件,監聽不到有線耳機和藍牙耳機的接入,但對於個人需求來講足夠了,監聽這個廣播就沒有延遲了,UI能夠當即響應

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

private void registerHeadsetPlugReceiver() {   

        IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);   

        registerReceiver(headsetPlugReceiver, intentFilter);  

    

       

    private BroadcastReceiver headsetPlugReceiver = new BroadcastReceiver() { 

   

        @Override 

        public void onReceive(Context context, Intent intent) { 

            String action = intent.getAction(); 

            if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(action)) { 

                handleHeadsetDisconnected(); 

            

        

           

    };

相關文章
相關標籤/搜索