Android代码-----检测手机耳机插拔

标签: android 代码 手机 | 发表时间:2013-03-23 23:51 | 作者:Jerome_XX
出处:http://blog.csdn.net

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://outofmemory.cn/code-snippet/970/android-detect-user-shifou-cha-erji

作者:Jerome_XX 发表于2013-3-23 23:51:24 原文链接
阅读:29 评论:0 查看评论

相关 [android 代码 手机] 推荐:

Android代码-----检测手机耳机插拔

- - CSDN博客移动开发推荐文章
AudioManager就有这个方法: isWiredHeadsetOn();. 如果插入了耳机,就返回true,否则false;. 当然,要加个权限,不然一直是返回false. 发现了实时检测耳机插入和拔出的过程,不过对我的需求来说帮助不是很大. 实时检测耳机插入和拔出:. 每当插入和拔出耳机时,系统都会发送Intent广播, 所以,只需要用一个receiver把这个广播intent(获取的action是:“android.intent.action.HEADSET_PLUG”)截获就好.

android 编程代码规范

- - CSDN博客推荐文章
                学习android开发已经有很长时间了,但是有时代码却很少用规范的模式进行书写,下面就简要的总结了自己学习的代码规范. 一、关于一些常量值资源的书写规范. 颜色值有RGB和透明信息Alpha组成,以#开头, 形式有 #RGB                        #ARGB                        #RRGGBB                    #AARRGGBB.

Android Native 代码开发学习笔记

- iDesperadO - WindStorm
本文提供排版更佳的PDF版本下载. JNI,全称Java Native Interface,是用于让运行在JVM中的Java代码和运行在JVM外的Native代码(主要是C或者C++)沟通的桥梁. 代码编写者即可以使用JNI从Java的程序中调用Native代码,又可以从Native程序中调用Java代码.

[原]Android有用代码片断(六)

- - 傲慢的上校的专栏
         不知不觉中,就收集了超过95条的自己感觉有意思的代码片段,分为五篇文章: android有用代码片段、 Android有用代码片段(二)、 Android有用代码片段(三)、 Android有用代码片段(四)、. Android有用代码片段(五). 这五篇,今天,开始第六篇的整理.

Android实用代码七段(一)

- - 博客园_首页
 这里积累了一些不常见确又很实用的代码,每收集7条更新一次,希望能对大家有用.   欢迎转载,但请保留文章原始出处:) .     博客园:http://www.cnblogs.com.     农民伯伯: http://over140.cnblogs.com   . 1、精确获取屏幕尺寸(例如:3.5、4.0、5.0寸屏幕) .

Android 4.0.3 源代码已推送到 AOSP

- - 谷安——谷奥Android专题站
16日 Google 宣布了 Android 4.0.3,该版本的源码目前已经推送到 AOSP 上,这是目前最新版本的 Ice Cream Sandwich. 这是首次推送了 4 个不同的版本,包括 Motorola XOOM、 Nexus S 和两个 Galaxy Nexus 版本.

Android WebView中的JavaScript代码使用

- - 博客园_首页
  上一篇博文: Android WebView使用基础已经说了一些Android中WebView的基本使用.   本篇文章主要介绍WebView中的JavaScript代码的执行相关,已经JS代码与Android代码的互相调用.   (因为本人对Web开发并不是很熟悉,所以如果有哪些地方说得不对,还请指正.

Android代码优化小技巧总结

- - 移动开发 - ITeye博客
关注微信号:javalearns   随时随地学Java. 这篇文章主要是介绍了一些小细节的优化技巧,当这些小技巧综合使用起来的时候,对于整个Android App的性能提升还是有作用的,只是不能较大幅度的提升性能而已. 选择合适的算法与数据结构才应该是你首要考虑的因素,在这篇文章中不会涉及这方面.

Android Design Support Library的代码实验

- - 鸟窝
原文: Codelab for Android Design Support Library used in I/O Rewind Bangkok session----Make your app fancy with few lines of code. 【翻-双语】Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏.

在Android手机上运行Ubuntu

- Alex Yu - Solidot
51开源社区 写道 "HTC Desire手机在经过简单的破解步骤后,已经可以相对稳定地运行以桌面应用为主的Linux操作系统Ubuntu. 破解方法是由一位论坛ID叫“Bergfex”的开发者发布的. 整个破解过程十分简便,仅需要在指定的文件夹——如SD卡的根目录和电脑的某个位置——中加载相应的zip文件,然后将手机设置成bootloader模式下加载,之后再将手机和电脑连接后重启即可.