暂时无法工作。

1.最近在做项目中遇到一个需要监控USB拔插来关闭服务的问题,当时查了不少资料,都是说android 3.0以上的USB类可以监控,╮(╯▽╰)╭比较难搞后来发现其实可以变通的监控外部电源来实现,相当于监控USB了呵呵,记录下来Intent.ACTION_POWER_DISCONNECTED 就是它了

2.http://www.cnblogs.com/zhjsll/p/3884679.html

USBBroadcastReceiver.java
 1 package com.example.communication;
 2
 3 import android.content.BroadcastReceiver;
 4 import android.content.Context;
 5 import android.content.Intent;
 6 import android.widget.Toast;
 7
 8 public class USBBroadcastReceiver extends BroadcastReceiver{
 9     @Override
10     public void onReceive(Context context, Intent intent) {
11         // TODO Auto-generated method stub
12         if(intent.getAction().equals("android.hardware.usb.action.USB_STATE")){
13              if (intent.getExtras().getBoolean("connected")){
14                 // usb 插入
15                  Toast.makeText(context, "插入", Toast.LENGTH_LONG).show();
16               }else{
17                //   usb 拔出
18                   Toast.makeText(context, "拔出", Toast.LENGTH_LONG).show();
19               }
20         }
21     }
22 }

AndroidManifest.xml

1 <receiver android:name=".USBBroadcastReceiver">
2    <intent-filter android:priority="800">
3        <action android:name="android.hardware.usb.action.USB_STATE"/>
4     </intent-filter>
5 </receiver>
 
 

Android中检查、监听电量和充电状态的方法

当你在更改后台更新频率来减少这些更新对电池寿命的影响时,检查当前电量和充电状态是一个好的开始。

电池寿命通过剩余电量和充电状态来影响应用更新的执行。当用交流电充电时,执行更新操作对设备的影响是微不足道的,所以在大多数案例里,你可以把更新频率调到最快。如果设备不在充电,降低更新频率可以帮助延长电池寿命。

类似的,你可以检查电池剩余电量级别,在电量低时,应该降低更新频率甚至停止更新。

注:此处的更新,指的是类似发送心跳包的动作,或者定时更新内容。并非仅仅指更新应用版本。如果是用户动作,比如翻页刷新,不需要根据电量和充电状态处理。

判断当前充电状态

通过判断当前充电状态开始。BatteryManager会通过一个intent广播所有电池和充电详情,包含充电状态。

因为这是一个sticky intent,你不需要注册广播接收器。简单地通过调用 registerReceiver,像下面的代码段传入一个null的接收器,当前电池状态的intent就会返回。你也可以传入一个真实的接收器对象,但我们暂时不会操作更新,所以这是没必要的。

复制代码代码如下:

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
//你可以读到充电状态,如果在充电,可以读到是usb还是交流电
 
// 是否在充电
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;
 
// 怎么充
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

通常你应该在使用交流电充电时最大化后台更新频率,在使用usb充电时降低,不充电时更低。

监听充电状态的改变

充电状态很容易改变(插入/拔出充电器),所以监听充电状态,更改刷新频率很重要。

充电状态改变时,BatteryManager会发一个广播。接收这些事件很重要,甚至在应用没有运行的时候,因为可能你需要后台开启更新服务。所以,在Androidmanifest.xml里注册广播接收器,加上两个action:ACTION_POWER_CONNECTED 和ACTION_POWER_DISCONNECTED作为过滤。

复制代码代码如下:

<receiver android:name=".PowerConnectionReceiver">
  <intent-filter>
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
  </intent-filter>
</receiver>

在关联的广播接收器实现里,你可以读出当前充电状态,方法跟上一步说的相同:

复制代码代码如下:

public class PowerConnectionReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                            status == BatteryManager.BATTERY_STATUS_FULL;
 
        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
        boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
        boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
    }
}

判断当前剩余电量

在某些案例里,判断当前剩余电量同样很有用。如果电量在某些水平之下,你可能会选择降低后台更新频率。
你可以用下面的代码读到电量:

复制代码代码如下:

//当前剩余电量
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
//电量最大值
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
//电量百分比
float batteryPct = level / (float)scale;

注:暂时不知道为什么要这样算,在我自己的机器上运行,scale就是100的。

监听剩余电量显著改变

持续监听电池状态不容易,但你不必这么做。
一般来说,持续监听电池电量对电池的影响比app的正常行为还要大。所以,只监听剩余电量的指定级别的改变(进入或离开低电量状态)是一个很好的实践。
manifest里声明的接收器,会在进入或离开低电量状态时触发。

复制代码代码如下:

<receiver android:name=".BatteryLevelReceiver">
<intent-filter>
  <action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
  <action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
  </intent-filter>
</receiver>

剩余电量严重不足时,最好禁用所有后台更新。在你可以使用手机之前就关机了,这种情况下,如果刷新数据并不重要。
在很多情况下,设备是是插入到底座里充电的(好吧,反正我没见几个人额外花钱买底座的,可能国外较多)。下节讲怎么判断当前底座状态和监听插入底座时改变。文章链接:http://www.jb51.net/article/51557.htm

Android monitor the plug/unplug of USB相关推荐

  1. 小米手机如何使用Android Monitor?

    Android Monitor 是Android Studio的重要工具,可以用来查看进程的内存.CPU等使用情况.本文简要记录一下如何在小米手机上使用Android Monitor. 1.手机打开开 ...

  2. android--------内存泄露分析工具—Android Monitor

    Android Studio 内置了四种性能监测工具Memory Monitor.Network Monitor.CPU Monitor.GPU Monitor,我们可以使用这些工具监测APP的状态, ...

  3. Linux Kernel 3.10内核源码分析--块设备层request plug/unplug机制

    一.基本原理 Linux块设备层使用了plug/unplug(蓄流/泄流)的机制来提升IO吞吐量.基本原理为:当IO请求提交时,不知直接提交给底层驱动,而是先将其放入一个队列中(相当于水池),待一定时 ...

  4. android usb多个,android、windows上多个USB Camera同时使用实验小结

    android.windows上多个USB Camera同时使用实验小结 (2013-05-18 19:19:46) 标签: 小结 实验 使用 杂谈 android.windows上多个USB Cam ...

  5. android monitor突然不能显示

    问题 如题 原因 不清楚.... 解决 方式一-有副作用(原因不明)-debug可能会一直 wait attach,不能进入调试模式 先将Android NDK support plugin禁用(重启 ...

  6. Android 系统(67)---android apk 的root 权限和USB adb 权限的区别

    android apk 的root 权限和USB adb 权限的区别 USB adb 权限是指,当adb 连接手机时,手机中的守护进程adbd 的权限为root 权限,从而它的子进程也具有root 权 ...

  7. 6.1、Android Studio的Android Monitor概览

    Android Monitor帮助你监测你的应用的性能,以帮助你合理的进行优化,调试,提升.如下功能: 1. Log消息,系统定义的或者开发者定义的. 2. 内存,CPU和GPU使用情况. 3. 网络 ...

  8. Monitor Hot Plug Detection(MSDN翻译)

    Monitor Hot Plug Detection 显卡上的Video output被看作是显卡的一个子设备.而monitor或者其他连接到output上的外部显示设备不会当作一个子设备.在初始化时 ...

  9. 21.9.22 Android Monitor

    特别申明:本文仅供自己学习记录使用,所写内容来自各网页,如需转载自己去查找内容出处.如有侵权请联系在下,评论.私信等不论. 目录 一.Android Monitor 1.DDMS概念 2.ddms功能 ...

最新文章

  1. 临床研究和医疗保健行业实现数据湖架构的机会和挑战
  2. ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测
  3. 【转】SAP Fiori Design Guidelines基础篇
  4. js的this与java的区别_JavaScirpt(JS)的this细究
  5. cf1556E. Equilibrium
  6. requests 返回的cookies为空_爬虫学习(2)(requests库)
  7. 6s电路图纸 iphone_(分享)iphone6s原理图、点位图(维修必备)
  8. VMware 克隆多个centos 7 操作系统
  9. 美元为什么能够无限超发?
  10. cass参考手册_CASS9.2参考手册
  11. phpmailer 与 mail
  12. MySQL数据库设计常犯的错以及对性能的影响
  13. 2021年美赛B题——解题参考
  14. php+mysql模板个人记账系统
  15. Java SSM面试题
  16. 如何创建计算机的桌面快捷方式,怎样创建桌面快捷方式 创建桌面快捷方式N种方法...
  17. 会使您势不可挡的程序员的行为
  18. 《蜗居》经典台词100句
  19. java d打字游戏_练习--java实现的打字游戏
  20. 数商云SCM系统供应商准入协同业务场景 | 助力建筑建材企业规范供应商准入环节

热门文章

  1. 在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)
  2. Java 基础总结 (分知识点、带目录)
  3. linq介绍及工作中应用两例——左联与内联,linq循环方法
  4. 台式电脑键盘f1是计算机怎么取消,电脑开启要按F1~怎么去掉?
  5. 解除映像劫持工具与源码,可解决因映像劫持导致的程序不能运行问题
  6. 笔记本怎么打开html的面板,笔记本电脑触摸板如何打开和关闭
  7. Python算法二分查找之重复元素列表
  8. ubuntu20.0.4+RTX3090配置深度学习环境的踩坑
  9. tabulate结合loguru打印出美观又方便查找的日志记录!
  10. Spark Shuffle实现