Android檢測手機耳機插拔的代碼

jopen 11年前發布 | 51K 次閱讀 Android Android開發 移動開發

AudioManager就有這個方法:isWiredHeadsetOn()

如果插入了耳機,就返回true,否則false;

當然,要加個權限,不然一直是返回false。

    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />  

實時檢測耳機插入和拔出:

每當插入和拔出耳機時,系統都會發送Intent廣播, 所以,只需要用一個receiver把這個廣播intent(獲取的action是:“android.intent.action.HEADSET_PLUG”)截獲就好。

這個receiver必須要用代碼注冊,而不能寫在manifest里面用寫入內存的方式。

在Android下實現檢測耳機插入和拔出,也即建立一個Broadcast Receiver,監聽“android.intent.action.HEADSET_PLUG”廣播

但直接在AndroidManifest.xml中添加一個<receiver>標簽是無效的,如:

    <receiver android:name=".HeadsetPlugReceiver">    
    <intent-filter>    
      <action android:name="android.intent.action.HEADSET_PLUG" android:enabled="true"></action>    
    </intent-filter>    
    </receiver>  

你會發現Receiver的onReceive事件永遠不會被觸發,解決方法就是手動編寫代碼注冊該廣播。

首先,創建一個BroadcastReceiver的子類,用于監聽耳機插入和拔出:

    public class HeadsetPlugReceiver extends BroadcastReceiver {    

        private static final String TAG = "HeadsetPlugReceiver";    

        @Override    
        public void onReceive(Context context, Intent intent) {    
          if (intent.hasExtra("state")){    
            if (intent.getIntExtra("state", 0) == 0){  
              Toast.makeText(context, "headset not connected", Toast.LENGTH_LONG).show();    
            }    
            else if (intent.getIntExtra("state", 0) == 1){    
              Toast.makeText(context, "headset connected", Toast.LENGTH_LONG).show();    
            }    
          }    
        }    

    }    
然后,在需要監聽該事件的Activity中的onCreate()中注冊監聽該廣播,同時不要忘記在onDestroy()中注銷監聽該廣播:
    public class TestHeadSetPlugActivity extends Activity {    

      private HeadsetPlugReceiver headsetPlugReceiver;    
      /** Called when the activity is first created. */    
      @Override    
      public void onCreate(Bundle savedInstanceState) {    
          super.onCreate(savedInstanceState);    
          setContentView(R.layout.main);    

          /* register receiver */    
          registerHeadsetPlugReceiver();    
      }    

      private void registerHeadsetPlugReceiver() {    
        headsetPlugReceiver = new HeadsetPlugReceiver();  
        IntentFilter intentFilter = new IntentFilter();    
        intentFilter.addAction("android.intent.action.HEADSET_PLUG");    
        registerReceiver(headsetPlugReceiver, intentFilter);    
      }    

      @Override    
      public void onDestroy() {    
        unregisterReceiver(headsetPlugReceiver);    
        super.onDestroy();    
      }   
    }    
如上這樣就可以實現檢測耳機插入和拔出了。

參考:http://outofmemory.cn/code-snippet/970/android-detect-user-shifou-cha-erji
來自:http://blog.csdn.net/jerome_xx/article/details/8711579

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!