本文来自 Eric飞猪 老师的CSDN博客:
Android代码---- 监控手机电池的状态(引申为可以监控手机usb线的插拔事件的监听)
现在做手机管理软件,我是手机端的,但是在这个过程中为了使用户有更好的额体验性,要在手机端显示是否是连接电脑的状态, 连接状态很好判断, 可以走曲线救国的方式,就是当我和PC端的软件通讯的时候就可以判断已经连接上了,但是如果断开则是有两种情况:1.用户在PC端点击断开连接.2.用户拔下手机数据线(估计这个出现的概率要更加的大)那么我就写了这样的判断方式。
1.第一种状态的出现: 可以定制广播,就是在PC端关闭这个连接的时候,PC端使用ADB命令发送一个stop广播,这样我在手机端就可以接收到这个广播来改变连接的状态
具体是:
Runtime.getRuntime().exec("adb shell am broadcast -a NotifyServiceStart");
2.第二种情况出现 : 我在查询了好多的广播后都是没有测试的,有好多只不过是监听SD卡的状态的广播但是这样的话我在使用PC端管理的时候手机主要的连接方式是USB调试模式下而非大容量存储,这样就造成了我们得不到广播,但是在我观察LOG的时候看到当我插拔数据线的时候系统还是发出的广播的但是我把这个广播放在我自定义的接受者中就会报错,估计这个广播不会让我们去获得,所以我只能走曲线救国的方式了,后来就想到了电池的状态,看到了网上一些人的监听电池状态的代码想到的
,当我拔下数据线的时候电池是放电状态 。给你看下面的代码估计就可以了解了
switch (intent.getIntExtra("status",
BatteryManager.BATTERY_STATUS_UNKNOWN)) {
case BatteryManager.BATTERY_STATUS_CHARGING:
BatteryStatus = "充电状态";
break;
case BatteryManager.BATTERY_STATUS_DISCHARGING:
BatteryStatus = "放电状态";
break;
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
BatteryStatus = "未充电";
break;
case BatteryManager.BATTERY_STATUS_FULL:
BatteryStatus = "充满电";
break;
case BatteryManager.BATTERY_STATUS_UNKNOWN:
BatteryStatus = "未知道状态";
break;
}
switch (intent.getIntExtra("plugged",
BatteryManager.BATTERY_PLUGGED_AC)) {
case BatteryManager.BATTERY_PLUGGED_AC:
BatteryStatus2 = "AC充电";
break;
case BatteryManager.BATTERY_PLUGGED_USB:
BatteryStatus2 = "USB充电";
break;
default:
BatteryStatus2 = "未知道状态";
break;
}
switch (intent.getIntExtra("health",
BatteryManager.BATTERY_HEALTH_UNKNOWN)) {
case BatteryManager.BATTERY_HEALTH_UNKNOWN:
BatteryTemp = "未知错误";
break;
case BatteryManager.BATTERY_HEALTH_GOOD:
BatteryTemp = "状态良好";
break;
case BatteryManager.BATTERY_HEALTH_DEAD:
BatteryTemp = "电池没有电";
break;
case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
BatteryTemp = "电池电压过高";
break;
case BatteryManager.BATTERY_HEALTH_OVERHEAT:
BatteryTemp = "电池过热";
break;
======>>>>>>源码在此