Android 判斷耳機是否存在

jopen 10年前發布 | 23K 次閱讀 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://code.google.com/p/android/issues/detail?id=4963

http://groups.google.com/group/android-developers/browse_thread/thread/6d0dda99b4f42c8f/a9c33e446db4f4d1?#a9c33e446db4f4d1

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