Android 优化电池使用时间——确定和监控基座对接状态和类型
2015-06-07 20:16
507 查看
原文参见此处
您可以根据手机的基座状态调整更新频率,具体取决于相关应用。如果设备插入的是桌面基座,您就可以提高体育中心类应用的更新频率;如果设备插入的是车载基座,您就可以完全停用此类更新。相反,如果设备插入的是车载基座且后台服务正在更新路况,您就可以最大程度地提高更新频率。
系统是以持续 Intent 的形式广播基座状态的,这样您就可以查询设备是否插入了基座,如果已插入,您还可以查询基座类型。
您可以从 EXTRA_DOCK_STATE 附加信息中提取当前的基座对接状态:
车载基座
桌面基座
低端(模拟)桌面基座
高端(数字)桌面基座
注意:后两种类型仅适用于 API 级别为 11 及以上的 Android,因此如果您只关注基座类型,而不在意基座究竟是数字的还是模拟的,那么比较合适的做法就是查看全部三种类型:
您可以使用上一步骤中所述的技术在接收器实施过程中提取基座的类型和状态。
确定和监控基座对接状态和类型
Android 设备支持几种不同类型的基座。这些类型包括车载或家用基座以及数字和模拟基座。许多基座可用于为插入的设备充电,因此基座状态通常与充电状态紧密相关。您可以根据手机的基座状态调整更新频率,具体取决于相关应用。如果设备插入的是桌面基座,您就可以提高体育中心类应用的更新频率;如果设备插入的是车载基座,您就可以完全停用此类更新。相反,如果设备插入的是车载基座且后台服务正在更新路况,您就可以最大程度地提高更新频率。
系统是以持续 Intent 的形式广播基座状态的,这样您就可以查询设备是否插入了基座,如果已插入,您还可以查询基座类型。
确定当前的基座状态
基座状态详情是以附加信息的形式包含在 ACTION_DOCK_EVENT 操作的持续广播中的。由于这属于持续广播,因此您无需注册 BroadcastReceiver。您可以将传入 null 的 registerReceiver() 作为广播接收器直接调用,具体如下一代码段所示。IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT); Intent dockStatus = context.registerReceiver(null, ifilter);
您可以从 EXTRA_DOCK_STATE 附加信息中提取当前的基座对接状态:
int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1); boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
确定当前的基座类型
用户可以将设备插入以下四种类型的基座:车载基座
桌面基座
低端(模拟)桌面基座
高端(数字)桌面基座
注意:后两种类型仅适用于 API 级别为 11 及以上的 Android,因此如果您只关注基座类型,而不在意基座究竟是数字的还是模拟的,那么比较合适的做法就是查看全部三种类型:
boolean isCar = dockState == EXTRA_DOCK_STATE_CAR; boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || dockState == EXTRA_DOCK_STATE_LE_DESK || dockState == EXTRA_DOCK_STATE_HE_DESK;
监控基座状态或类型的变化
无论设备是否插入了基座,系统都会广播 ACTION_DOCK_EVENT 操作。要监控设备基座状态的变化,您只需在应用清单中注册广播接收器即可,具体如以下代码段所示:<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>
您可以使用上一步骤中所述的技术在接收器实施过程中提取基座的类型和状态。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories