当前位置: 移动技术网 > 移动技术>移动开发>Android > android 检测耳机是否插入方法

android 检测耳机是否插入方法

2019年07月24日  | 移动技术网移动技术  | 我要评论
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>标签是无效的,如:
[html]
复制代码 代码如下:

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

你会发现receiver的onreceive事件永远不会被触发,解决方法就是手动编写代码注册该广播。
首先,创建一个broadcastreceiver的子类,用于监听耳机插入和拔出:
[java]
复制代码 代码如下:

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()中注销监听该广播:
[java]
复制代码 代码如下:

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();
}
}

如上这样就可以实现检测耳机插入和拔出了。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网