1. 程式人生 > >Android 耳機狀態監聽

Android 耳機狀態監聽

專案中遇到這樣的需求,要求監聽耳機插拔狀態變化,進行埋點上報處理,把實現程式碼分享一下。

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、註冊和解註冊的位置,根據實際情況做處理,防止記憶體洩露。