android 判断耳机是否插入的几种方式
2012-12-14 17:59
507 查看
这篇文章写的是获取耳机连接状态的几种方式,不包括蓝牙耳机的连接,当然,声音从哪个设备中发出来也不管。
耳机插入和拔出时会发出广播ACTION_HEADSET_PLUG,所以只要注册一个广播接受者就可以监听耳机的状态了
但这样子写其实有的时候还是不能够满足我们的需求的,很明显,这个只能够监听插入和拔出的动作。但如果应用启动之后没有插入或拔出耳机,这个时候并不能够获得当前耳机是处于一个什么样的状态。
如何能够获取当前耳机处于连接还是断开的状态呢?
跟踪源代码可以发现耳机的状态保存在文件 /sys/class/switch/h2w/state 中,所以获取耳机状态还可以这样写
0:无插入,1:耳机和话筒均插入,2:仅插入话筒。
这样写也比较麻烦,还有另外一种方式 android源码中 android.media.AudioManager类有一个方法 isWiredHeadsetOn() 判断有线耳机是否连接,这个方法不是静态方法,所以不能直接调用。
首先声明成员变量
然后在activity的oncreate() 方法中取得对象
然后可以直接调用 audoManager.isWiredHeadsetOn();
注意要加个权限
这样就可以在你需要的地方轻松地获得耳机的连接状态了。
耳机插入和拔出时会发出广播ACTION_HEADSET_PLUG,所以只要注册一个广播接受者就可以监听耳机的状态了
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 中,所以获取耳机状态还可以这样写
private static final String HEADSET_STATE_PATH = "/sys/class/switch/h2w/state"; private boolean isHeadsetExists() { char[] buffer = new char[1024]; int newState = 0; try { FileReader file = new FileReader(HEADSET_STATE_PATH); int len = file.read(buffer, 0, 1024); 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() 判断有线耳机是否连接,这个方法不是静态方法,所以不能直接调用。
首先声明成员变量
private AudioManager audoManager;
然后在activity的oncreate() 方法中取得对象
audoManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
然后可以直接调用 audoManager.isWiredHeadsetOn();
注意要加个权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
这样就可以在你需要的地方轻松地获得耳机的连接状态了。
相关文章推荐
- android 判断耳机是否插入的几种方式
- android 判断耳机是否插入的几种方式
- android动态注册判断耳机(headset)是否插入
- Android 判断耳机是否插入
- iOS判断是否插入耳机
- Android应用程序快捷方式操作(添加,删除,判断是否存在)
- Android应用添加(创建)和删除及判断是否存在桌面快捷方式
- Linux自动判断是否插入网线的几种方法
- android launcher创建删除判断是否存在快捷方式
- android 检测耳机是否插入
- 判断是否是数值的几种不同方式的效率比较
- Android判断快捷方式是否存在
- c# WinFo判断当前程序是否已经启动或存在的几种方式
- android 检测耳机是否插入-改进方案
- 判断设备是否插入耳机
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
- 【Android】判断快捷方式是否存在——兼容性更强(速度提升12倍)
- 嵌入式 自动判断是否插入网线的几种方法
- android桌面添加快捷方式之判断是否存在无效
- android 创建、删除、判断是否存在快捷方式