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>标签是无效的,如:
[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();
}
}

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

(0)

相关推荐

  • 基于Android SQLite的升级详解

    做Android应用,不可避免的会与SQLite打交道.随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了. SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,但是不能从表中删除字段. 并且只能在表的末尾添加字段,比如,为 Subscription添加两个字段: 复制代码 代码如下: ALTER TABLE Subscription ADD COLUMN Activation BLOB;ALTER

  • Android和IOS的浏览器中检测是否安装某个客户端的方法

    我们希望更多的用户用我们的产品,更希望能留住更多的用户.这个时候让用户使用客户端的意义就变得格外重要了. 毕竟客户端是实实在在的占据了用户的桌面,每天或多或少都会看到我们的产品.然后,作为手机端的Web产品,用户通过手机浏览器访问到了我们的页面,我们就希望用户能直接使用或者下载我们的客户端产品了.最后就有了下载Banner一说. IOS 说到IOS,非常兴奋的是,自IOS6开始,我们只需要在html里加上meta标签就可以了.具体的meta标签是:<meta name="apple-itu

  • Android编程实现自动检测版本及自动升级的方法

    本文实例讲述了Android编程实现自动检测版本及自动升级的方法.分享给大家供大家参考,具体如下: 步骤: 1.检测当前版本的信息AndroidManifest.xml-->manifest-->android:versionName. 2.从服务器获取版本号(版本号存在于xml文件中)并与当前检测到的版本进行匹配,如果不匹配,提示用户进行升级,如果匹配则进入程序主界面. 3.当提示用户进行版本升级时,如果用户点击了确定,系统将自动从服务器上下载并进行自动升级,如果点击取消将进入程序主界面.

  • android 版本检测 Android程序的版本检测与更新实现介绍

    做个网站的安卓客户端,用户安装到自己手机上,如果我出了新版本怎么办呢?要有版本更新功能. 本来版本检测最好可以自动进行.但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本更新是小概率的事情.或许可以程序开启的时候,判断一下时间,单日就检测,双日就不检测,或者随机什么的,降低一下检测的频率? 我采取的做法是将检测功能做到了菜单上,用户有需要,就手动打开自己检测一下.反正我们这个是网站客户端,有版本更新,在网站上发个通告就行了. 版本检测与更新有以下几个关键步骤: 1.检测有无新版本 2.下载

  • Android增量升级的方法和原理详细介绍

    总结:我们使用delta编码算法减少Android应用升级程序的大小.我们通过bsdiff和bspatch工具在android上实现delta编码算法.服务器软件和android应用已经部署.当前,我们能够减少Android升级流量的50%,如果大量的部署,这将会减少网络的压力. 升级机制:我们打算采用delta编码的patch升级Android应用.新的升级机制可以描述如下: 1.  在服务器上生成一个patch.2.  下载patch到手机中.3.  通过补丁获取一个已安装应用的新的安装ap

  • Android系统检测程序内存占用各种方法

    1.检查系统总内存 复制代码 代码如下: liuhx@uc ~ $ adb shell cat /proc/meminfo MemTotal:         840868 kB MemFree:          457344 kB Buffers:            1744 kB Cached:           203064 kB SwapCached:            0 kB Active:           234932 kB Inactive:         12

  • android实现程序自动升级到安装示例分享(下载android程序安装包)

    复制代码 代码如下: //程序下载升级 zhouxiang@JavascriptInterfacepublic void UpdateCAECP(final String path){try{AlertDialog.Builder builder = new Builder((Context)obj);builder.setMessage("检测到有新版本发布,是否进行下载升级?");builder.setTitle("程序更新提示");builder.setPos

  • Android编程实现检测当前电源状态的方法

    本文实例讲述了Android编程实现检测当前电源状态的方法.分享给大家供大家参考,具体如下: 检测到现在在电源状态: IntentFilter mIntentFilter = new IntentFilter(); mIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); registerReceiver(mIntentReceiver, mIntentFilter); //声明消息处理过程 private BroadcastReceiver

  • Android实现创建或升级数据库时执行语句

    本文实例讲述了Android创建或升级数据库时执行的语句,如果是创建或升级数据库,请使用带List参数的构造方法,带SQL语句的构造方法将在数据库创建或升级时执行. 具体程序代码如下: import java.util.List; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFac

  • android 检测耳机是否插入方法

    AudioManager就有这个方法: isWiredHeadsetOn(): 如果插入了耳机,就返回true,否则false; 当然,要加个权限,不然一直是返回false. <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 开始我追了好久的源码.发现了实时检测耳机插入和拔出的过程,不过对我的需求来说帮助不是很大. 实时检测耳机插入和拔出: 每当插入和拔出耳机时,系统都会发

  • Android检测IBeacon热点的方法

    IBeacon是BLE的一种,搜索iBeacon基站关键在于设备扫描到的scanRecord数组,识别是否有下面加粗斜体的02 15这两个数字.如果有,搜索到的蓝牙设备就是IBeacon. // AirLocate: // 02 01 1a 1a ff 4c 00 02 15 # Apple's fixed iBeacon advertising prefix // e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon profile

  • android实现添加耳机状态图标的方法

    本文实例讲述了android实现添加耳机状态图标的方法.分享给大家供大家参考.具体如下: 原生态的android系统是没有耳机插入或未插入的状态指示的,本文就是讲解如何添加耳机插入的状态指示.效果图如下 如图,当插入耳机后,在status bar上出现了一个耳机的图标. 这个耳机的图标和sim卡信号等图标在status bar的右边,因此这个实现肯定不是通过notification实现的,那么添加这个功能只能在framwork里面寻找了.具体的修改步骤如下: 1.在frameworks/base

  • Android中TextView显示插入的图片实现方法

    本文实例讲述了Android中TextView显示插入的图片实现方法.分享给大家供大家参考,具体如下: Android系统默认给TextView插入图片提供了三种方式: 1.ImageSpan 2.Html.ImageGetter 3.TextView.setCompoundDrawables(left, top, right, bottom) 1.TextView使用ImageSpan显示图片 ImageSpan span = new ImageSpan(this, R.drawable.ic

  • Android检测Cursor泄漏的原理以及使用方法

    简介: 本文介绍如何在 Android 检测 Cursor 泄漏的原理以及使用方法,还指出几种常见的出错示例.有一些泄漏在代码中难以察觉,但程序长时间运行后必然会出现异常.同时该方法同样适合于其他需要检测资源泄露的情况. 最近发现某蔬菜手机连接程序在查询媒体存储(MediaProvider)数据库时出现严重 Cursor 泄漏现象,运行一段时间后会导致系统中所有使用到该数据库的程序无法使用.另外在工作中也常发现有些应用有 Cursor 泄漏现象,由于需要长时间运行才会出现异常,所以有的此类 bu

  • Android检测手机中存储卡及剩余空间大小的方法(基于Environment,StatFs及DecimalFormat)

    本文实例讲述了Android检测手机中存储卡及剩余空间大小的方法.分享给大家供大家参考,具体如下: Android中Environment可用来检测手机中是否安装有存储卡以及文件存储路径等.StatFs可以获取存储卡的空间大小以及剩余空间大小.DecimalFormat可以实现把数字划分为一定的格式. 具体程序如下: import java.io.File; import java.text.DecimalFormat; import android.app.Activity; import a

  • Android检测Activity或者Service是否运行的方法

    需求:假设我们的APP有3个页面AActivity,BActivity,CActivity,我们的APP需要一直运行在前台(特殊设备),要求实现一个监控服务,来监视APP是否运行,如果有3个页面都不运行了就说明这个APP已经挂掉了,否则说明APP在运行状态,不做处理,挂掉之后,我们需要重新启动App来让它继续处理运行状态,对外暴露一个来停止监控服务的广播,这样我们想停止监控服务时,发送一个广播即可. 思路:实现一个双进程的监控服务,服务中写一个定时器 Timer 来重复进行检测是否正在运行,如果

  • Android检测url地址是否可达的两种方法

    方法一 try{ URL url = new URL(address); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); conn.setConnectTimeout(waitMilliSecond); conn.setReadTimeout(waitMilliSecond); //H

  • android检测SD卡读写权限方法

    一.解析 做项目遇到了一个棘手的问题,SD卡的读写权限问题. 1.android版本在6.0以上版本时,以下代码才有用: if (Build.VERSION.SDK_INT >= 23) { UiUtils.getInstance().showToast("1"); //减少是否拥有权限checkCallPhonePermission != PackageManager.PERMISSION_GRANTED int checkCallPhonePermission = Conte

  • Android检测手机多点触摸点数的方法

    本文实例为大家分享了Android检测手机多点触摸点数的具体代码,供大家参考,具体内容如下 多点触摸点数效果图 Circle.java package com.zking.administrator.g160628_android19_pointstouch;   import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint;   import java.util.Rand

随机推荐