android 检测耳机是否插入方法

2016-02-19 11:30 7 1 收藏

今天图老师小编给大家展示的是android 检测耳机是否插入方法,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

【 tulaoshi.com - 编程语言 】

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

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

来源:http://www.tulaoshi.com/n/20160219/1597738.html

延伸阅读
标签: 怀孕 孕期 孕妇
1、孕妇感知变化 通常计算孕周和预产期是从末次月经推算出来的,而怀孕期间各种妊娠反应都会预兆着到了某一个孕期阶段,只要把推算出来的孕周和实际变化对应的孕周作对比,再参考产检出来的各项数据,就可以得知胎儿发育是否成熟。通过孕妇感知变化来得知胎儿发育是否成熟,是一种比较简单的检查方法。 2、X射线检测 X...
标签: 育儿
从8个方面检查宝宝健康状况 如何检测宝宝是否健康?对于很多新手爸妈来讲,孩子的健康简直牵动了她们的心弦!她们每时每刻都处于紧张的状态中,她们担心孩子的健康出现意外情况,事实上,在育儿过程中你可以通过以下8个方面来检测宝宝的健康是否出现问题! 对于新手爸爸妈妈来说,宝宝出生带来的惊喜往往还伴随着一些恐惧,在未来的1-2年内,你...
1、孕妇感知变化 通常计算孕周和预产期是从末次月经推算出来的,而怀孕期间各种妊娠反应都会预兆着到了某一个孕期阶段,只要把推算出来的孕周和实际变化对应的孕周作对比,再参考产检出来的各项数据,就可以得知胎儿发育是否成熟。通过孕妇感知变化来得知胎儿发育是否成熟,是一种比较简单的检查方法。 2、X射线检测 X射线...
肝功能正常值 肝脏是否正常的检测 肝脏是我们身体上中重要的一个器官了,我们要经常的检查我们肝脏的功能情况,那么大家知道肝功能正常值是多少吗,肝功能异常的表现是什么呢,肝功能检查项目是怎么样的呢,下面就让我们一起来了解一下吧。 肝脏对于我们来说是很重要的,如果我们的肝脏在遭受威胁,而我们不知道的话是...
可以用如下方法: 修改AudioYusuStreamOut.cpp,添加方法: 代码如下: void AudioYusuStreamOut::swS2M(const void* buffer, size_t bytes) { uint32 Idx_i; int16 PCM_M; short* pbuffer=(short*)buffer; { //enable software stereo to mono for(Idx_i = 0; Idx_ibytes1; Idx_i+=2) { PCM_M = pbuffer[Idx_i+1]; pbuffer[Idx_i+1...

经验教程

664

收藏

65
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部