android判断耳机

    xiaoxiao2021-03-25  118

    原文:http://blog.csdn.net/qinghua0706/article/details/8296276

    这篇文章写的是获取耳机连接状态的几种方式,不包括蓝牙耳机的连接,当然,声音从哪个设备中发出来也不管。

          耳机插入和拔出时会发出广播ACTION_HEADSET_PLUG,所以只要注册一个广播接受者就可以监听耳机的状态了

    [java] view plain copy private final BroadcastReceiver mReceiver = new BroadcastReceiver() {      @Override      public void onReceive(Context context, Intent intent) {          String action = intent.getAction();          if (action.equals(Intent.ACTION_HEADSET_PLUG)) {              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();                  }              }          }      }  };         但这样子写其实有的时候还是不能够满足我们的需求的,很明显,这个只能够监听插入和拔出的动作。但如果应用启动之后没有插入或拔出耳机,这个时候并不能够获得当前耳机是处于一个什么样的状态。

    如何能够获取当前耳机处于连接还是断开的状态呢?

    跟踪源代码可以发现耳机的状态保存在文件  /sys/class/switch/h2w/state 中,所以获取耳机状态还可以这样写

    [java] view plain copy private static final String HEADSET_STATE_PATH = "/sys/class/switch/h2w/state";    nbsp;private boolean isHeadsetExists() {      char[] buffer = new char[1024];        int newState = 0;        try {          FileReader file = new FileReader(HEADSET_STATE_PATH);          int len = file.read(buffer, 01024);          newState = Integer.valueOf((new String(buffer, 0, len)).trim());      }      catch (FileNotFoundException e) {          Log.e("FMTest""This kernel does not have wired headset support");      }      catch (Exception e) {          Log.e("FMTest""", e);      }      return newState != 0;  }    state取值

    0:无插入,1:耳机和话筒均插入,2:仅插入话筒。

    这样写也比较麻烦,还有另外一种方式  Android源码中 android.media.AudioManager类有一个方法  isWiredHeadsetOn()  判断有线耳机是否连接,这个方法不是静态方法,所以不能直接调用。

    首先声明成员变量

    [java] view plain copy private AudioManager audoManager;  

    然后在activity的oncreate() 方法中取得对象

    [java] view plain copy audoManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);  

    然后可以直接调用   audoManager.isWiredHeadsetOn(); 

    注意要加个权限

    [html] view plain copy     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />   这样就可以在你需要的地方轻松地获得耳机的连接状态了。
    转载请注明原文地址: https://ju.6miu.com/read-20362.html

    最新回复(0)