android 检测耳机是否插入方法
程序员文章站
2024-02-11 14:18:16
audiomanager就有这个方法: iswiredheadseton(); 如果插入了耳机,就返回true,否则false; 当然,要加个权限,不然一直是返回false...
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();
}
}
如上这样就可以实现检测耳机插入和拔出了。
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();
}
}
如上这样就可以实现检测耳机插入和拔出了。