android 电量详情,Android应用开发之Android 8.0 电池-)耗电详情获取方法
本文将带你了解Android应用开发之Android 8.0 电池-)耗电详情获取方法,希望本文对大家学Android有所帮助。
Android 8.0 电池-)耗电详情获取方法
主要介绍UI位置和基本函数入口,其中耗电详情与power_profile.xml息息相关
1. UI 界面
源码">2. 源码
2.1 设置界面入口
PowerUsageSummary->getPreferenceScreenResId()
package com.android.settings.fuelgauge; /** * Displays a list of apps and subsystems that consume power, ordered by how much power was * consumed since the last time it was unplugged. */public class PowerUsageSummary extends PowerUsageBase implements AnomalyDialogListener, OnLongClickListener, OnClickListener { @Override protected int getPreferenceScreenResId() { return R.xml.power_usage_summary; }
2.2 UI 布局
R.xml.power_usage_summary
?123"充满电(^1前)后的应用用电量"
上述即 key 为 app_list 为耗电详情列表
2.3 耗电详情 app_list
PowerUsageSummary.java
?1234567private static final String KEY_APP_LIST = "app_list"; @Overridepublic void onCreate(Bundle icicle) { super.onCreate(icicle); ... mAppListGroup = (PreferenceGroup) findPreference(KEY_APP_LIST);
2.4 耗电数据填充
PowerUsageSummary->refreshAppListGroup, 显示耗电详情 PowerUsageSummary->addNotAvailableMessage, 显示没有电池使用数据
?123456789101112131415161718private void refreshAppListGroup() { ... mAppListGroup.addPreference(notAvailable); ... } private void addNotAvailableMessage() { final String NOT_AVAILABLE = "not_available"; Preference notAvailable = getCachedPreference(NOT_AVAILABLE); if (notAvailable == null) {notAvailable = new Preference(getPrefContext());notAvailable.setKey(NOT_AVAILABLE);//"没有电池使用数据。"notAvailable.setTitle(R.string.power_usage_not_available);mAppListGroup.addPreference(notAvailable); } }
2.5 refreshAppListGroup 数据处理
2.5.1 条件判断-功耗参考文件
PowerUsageSummary->refreshAppListGroup
// 是否使用假数据 private static final boolean USE_FAKE_DATA = false; // 背光电流的最小值 private static final int MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP = 10; private void refreshAppListGroup() { // 获取背光亮度功率 final double averagePower = powerProfile.getAveragePower(PowerProfile.POWER_SCREEN_FULL); if (averagePower >= MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP || USE_FAKE_DATA) {// 这里要求平均电流需要大于 10, 要求我们需要配置 power_profile.xml 文件的电流数据// frameworks\base\core\res\res\xml\power_profile.xml 厂商根据功耗电流进行配置,否则该项数据始终为无 final ListusageList = getCoalescedUsageList( USE_FAKE_DATA ? getFakeStats() : mStatsHelper.getUsageList()); }
小知识
文件路径在于:frameworks\base\core\java\com\android\internal\os\PowerProfile.java文件路径:frameworks\base\core\res\res\xml\power_profile.xml /** * Power consumption at full backlight brightness. If the backlight is at * 50% brightness, then this should be multiplied by 0.5 */ public static final String POWER_SCREEN_FULL = "screen.full"; 0.1
2.5.2 功耗文件,获取假数据
PowerUsageSummary-> getFakeStats()private static ListgetFakeStats() { ArrayListstats = new ArrayList<>(); float use = 5; for (DrainType type : DrainType.values()) {if (type == DrainType.APP) { continue;}stats.add(new BatterySipper(type, null, use));use += 5; } for (int i = 0; i < 100; i++) {stats.add(new BatterySipper(DrainType.APP, new FakeUid(Process.FIRST_APPLICATION_UID + i), use)); } stats.add(new BatterySipper(DrainType.APP, new FakeUid(0), use)); // Simulate dex2oat process. BatterySipper sipper = new BatterySipper(DrainType.APP, new FakeUid(UserHandle.getSharedAppGid(Process.FIRST_APPLICATION_UID)), 10.0f); sipper.packageWithHighestDrain = "dex2oat"; stats.add(sipper); sipper = new BatterySipper(DrainType.APP, new FakeUid(UserHandle.getSharedAppGid(Process.FIRST_APPLICATION_UID + 1)), 10.0f); sipper.packageWithHighestDrain = "dex2oat"; stats.add(sipper); sipper = new BatterySipper(DrainType.APP, new FakeUid(UserHandle.getSharedAppGid(Process.LOG_UID)), 9.0f); stats.add(sipper); return stats; }
2.5.3 功耗文件,获取功耗数据
frameworks/base/core/java/com/android/internal/os/BatteryStatsHelper.java
BatteryStatsHelper->getUsageList()
/** * List of apps using power. */private final ListmUsageList = new ArrayList<>(); public ListgetUsageList() { return mUsageList;} public void refreshStats(int statsType, SparseArrayasUsers, long rawRealtimeUs, long rawUptimeUs) { ... mUsageList.add(index, bs); ...}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注移动开发之Android频道!
android 电量详情,Android应用开发之Android 8.0 电池-)耗电详情获取方法相关推荐
- android ndk 多线程mk,NDK开发之Android.mk文件编写
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 现在我们把android稍微写复杂些.在项目根目录下创建一个lib1文件夹 结构如图: test10.h和test11. ...
- Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...
本文将带你了解Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit,希望本文对大家学Android有所帮助. 系统Api :打开新的 ...
- 镜像处理坐标 android,Android应用开发之Android重写ImageView实现图片镜像效果的代码教程...
本文将带你了解Android应用开发之Android重写ImageView实现图片镜像效果的代码教程,希望本文对大家学Android有所帮助. 前两天朋友问我一个问题,如何实现从手机系统相册加载一张图 ...
- android添加截图功能,Android应用开发之Android 5.0及以上编程实现屏幕截图功能的方法...
本文将带你了解Android应用开发Android 5.0及以上编程实现屏幕截图功能的方法,希望本文对大家学Android有所帮助. 本文实例讲述了Android 5.0及以上编程实现屏幕截图功能 ...
- android 图片横竖判断_Android应用开发之android 判断ImageView当前显示的是哪一张图片...
本文将带你了解Android应用开发之android 判断ImageView当前显示的是哪一张图片,希望本文对大家学Android有所帮助. 判断ImageView当前显示的是哪一张图片 Java ...
- java edittext 输入监听_Android应用开发之Android EditText 监听用户输入完成的实例
本文将带你了解Android应用开发Android EditText 监听用户输入完成的实例,希望本文对大家学Android有所帮助. 我们都知道, Android EditText输入框,并没有 ...
- android图片保存形式,Android应用开发之Android ScrollView截图和图片保存到相册的方式...
本文将带你了解Android应用开发之Android ScrollView截图和图片保存到相册的方式,希望本文对大家学Android有所帮助. 1.1首先来看你一种截取屏幕,这种代码有缺陷,只能截取一 ...
- android 开发art,Android应用开发之Android 系统启动原理(art 虚拟机)
本文将带你了解Android应用开发之Android 系统启动原理(art 虚拟机),希望本文对大家学Android有所帮助. Android 系统启动原理(art 虚拟机) 一.虚拟机的启动 A ...
- android webview 太大,Android应用开发之Android WebView加载图片显示过大的处理教程(代码教程)...
本文将带你了解Android应用开发Android WebView加载图片显示过大的处理教程(代码教程),希望本文对大家学Android有所帮助. Webview加载图片时,经常会遇到图片显示不符合 ...
最新文章
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
- 单片机检测stc没反应_STC 核心板 入门记 - 你好我叫郑某人
- 遭遇内存无法读写的错误
- 基于pythonselect.select模块通信的实例讲解
- Nginx Location 工作流程图及总结
- 等额本息和等额本金 计算公式
- 英文阅读新姿势:新版 Edge + 侧边翻译
- 互联网公司的裁员,能玩出多少种花样?
- 请问什么是AIX 5L的PTF?
- 特别篇:公主,快放开那只巨龙
- request to https://registry.npmjs.org/@angular%2fcli failed, reason: read ECONNRESET
- 苹果手机软件升级密码_安卓系统用久了会卡,苹果系统就能一直流畅?
- Generating Event Causality Hypotheses through Semantic Relation
- 【OpenCV】人脸检测和识别
- 快手安全 X 墨菲安全 | 软件供应链安全解决方案完整分享
- OpenStack常用运维命令手册-V1.0-黑夜青儿
- 第十二届蓝桥杯第二期模拟赛(java) python解法
- VUE设置浏览器icon图标
- 看《骇客帝国-重装上阵》说法语
- python判断性别的源代码_python 通过手机号识别出对应的微信性别(实例代码)