Android 判断耳机是否存在

分享到:

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>标签是无效的,如:

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

你会发现Receiver的onReceive事件永远不会被触发,解决方法就是手动编写代码注册该广播。

首先,创建一个BroadcastReceiver的子类,用于监听耳机插入和拔出:

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()中注销监听该广播:

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://code.google.com/p/android/issues/detail?id=4963

http://groups.google.com/group/android-developers/browse_thread/thread/6d0dda99b4f42c8f/a9c33e446db4f4d1?#a9c33e446db4f4d1

昵    称:
验证码:

相关文档:

  • [Android_GooglePlay]在谷歌商店上传应用方法_apk签名
    应用程序需要经过签名(sign)才可以发布,签名的主要作用是...id不能安装没有签名的APK,如果通过debug方式(开发者...用debug私钥签名...
  • 进一步优化Bitmap Cache策略
    上一篇文章中(http://blog.csdn.net/a345017062/article/details/8753649)提到了两种bitmapcache,这篇文章讲一下具体如何确定具体的BitmapCache策略。...
  • Android入门:ListView(SimpleCursorAdapter实现)
    一般ListView都是用来显示列表的,一般列表的数据都是来自数据库的,因此我们这里假设前面已经实现了一个DBService类,里面存在pageCursor...
  • AnimationDrawable 资源
    AnimationDrawable代表一个动画,Android既支持传统的逐帧动画(类似于电影方式,一张图片、一张图片地切换),也支持通过平移、变换计算...
  • Android Metro风格的Launcher开发系列第一篇
    可能大家做Android机顶盒或者Android电视开发的比较少,这类开发基本上都是基于源码的开发,大家有一个git版本库,大家开发完了编译出...
  • AndroidManifest.xml配置文件详解
    <manifest>AndroidManifest.xml配置文件的根元素,必须包含一个<application>元素并且指定xlmns:android和package属性。xlmns:android指定了Android...
  • Android带导航点的ViewPager
    Android带导航点的ViewPager...
  • Android开发者必备的十个工具介绍_Android
    这篇文章主要介绍了Android开发者必备的十个工具介绍,在这篇文章中,讨论了10个最常见的工具,android 开发者应该了解和学习使用,需要的朋...
  • android imageview图片居中技巧应用
    做UI布局,尤其是遇到比较复杂的多重LinearLayout嵌套,常常会被一些比较小的问题困扰上半天,可是无论怎样设置layout_gravity属性,都无法达...
  • Android Wifi的使用
    原帖http://aina-hk55hk.iteye.com/blog/717954 packagecom.Aina.Android; importjava.util.List; importandroid.content.Context; importandroid.net.wifi.Sca...
  • Android studio教程:[6]创建多个Activity
    通常来说,一个android应用程序不止一个Activity(活动),更不止一个界面。于是需要创建多个Activity来满足应用程序的要求,这里我将告诉...
  • Android ListView的item背景色设置
    1.如何改变item的背景色和按下颜色 listview默认情况下,item的背景色是黑色,在用户点击时是黄色的。如果需要修改为自定义的背景颜色...
  • android POST数据遇到的UTF-8编码(乱码)问题解决办法_Android
    这篇文章主要介绍了android POST数据遇到的UTF-8编码(乱码)问题解决办法,需要的朋友可以参考下...
  • android wifi hotspot
    http://www.java2s.com/Open-Source/Android/Network/smartphone-networks/softaptest/mobed/yonsei/Main.java.htmsmartphonenetworks»softaptest»...
  • JNI及Android JNI 开发基本知识和具体操作步骤
    目录:1JNI基础知识2Android中的JNI3我们在写JNI时候,一些容易出现的问题4Android中一个简单的例子5Android中交叉编译最新版libjpeg-8d的例子6C+...
  • Android 开源图标库:inoIconView
    对于一个独立开发者来说,瓶颈往往不是技术而是美工,而美工这部分最重要而程序员又不能解决的是图标。要找到一套好的图标资源并...
  • android SDK2.3 更新改动翻译
    谢谢翻译者: http://www.eoeandroid.com/thread-52780-1-1.html SDK2.3變化概要API等級:9對於開發者來說,Android2.3平臺是一個可下載的SDK組件。這個...
  • Android 防止截屏
    WindowManager.LayoutParams 是 WindowManager 接口的嵌套类;它继承于 ViewGroup.LayoutParams; 它用于向WindowManager描述Window的管理策略。...
  • Android基础:listview的item点击事件会使里面的Button也出现按压的效果
    给listview里面的button设置selector后,当给listview设置listview.setOnitemClickedListener()的时候,里面的button会有press的效果,有两个方案 1:放弃lis...
  • 记录android的bug
    java.lang.IllegalStateException:Targethostmustnotbenull,orsetinparameters.原因:连接地址不完整,必须加上"http://"。 ================================================...