android 电量控制
这个插件是属于设置的一部分,可以在
1
|
packages\apps\Settings\res\drawable-hdpi
|
这个文件夹里面查看,呵呵,有没有看到上面目录的斜杠方向,懂吧。
这里找到一个文件名为:“ic_appwidget_settings_mobile_off” 的PNG文件。
而相关的文件是:
1
|
vim packages/apps/Settings/src/com/android/settings/widget/SettingsAppWidgetProvider.java
|
代码要修改有几个部分,可以搜索“BUTTON_MOBILE”,进行修改。
1. 是否显示这个部件
01
|
/**
|
02
|
* Provides control of power-related settings from a widget.
|
03
|
*/
|
04
|
public class SettingsAppWidgetProvider extends AppWidgetProvider {
|
05
|
static final String TAG = "SettingsAppWidgetProvider" ;
|
06
|
07
|
static final ComponentName THIS_APPWIDGET =
|
08
|
new ComponentName( "com.android.settings" ,
|
09
|
"com.android.settings.widget.SettingsAppWidgetProvider" );
|
10
|
11
|
private static LocalBluetoothManager sLocalBluetoothManager = null ;
|
12
|
private static TelephonyManager mTelephonyManager = null ;
|
13
|
14
|
private static final int BUTTON_WIFI = 0 ;
|
15
|
private static final int BUTTON_BRIGHTNESS = 1 ;
|
16
|
private static final int BUTTON_SYNC = 2 ;
|
17
|
private static final int BUTTON_GPS = 3 ;
|
18
|
private static final int BUTTON_BLUETOOTH = 4 ;
|
19
|
// private static final int BUTTON_MOBILE = 5; /* 该产品没有通话功能。 */
|
2. 点击之后的事件处理
01
|
/**
|
02
|
* Receives and processes a button pressed intent or state change.
|
03
|
*
|
04
|
* @param context
|
05
|
* @param intent Indicates the pressed button.
|
06
|
*/
|
07
|
@Override
|
08
|
public void onReceive(Context context, Intent intent) {
|
09
|
super .onReceive(context, intent);
|
10
|
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
|
11
|
sWifiState.onActualStateChange(context, intent);
|
12
|
} else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(intent.getAction())) {
|
13
|
sBluetoothState.onActualStateChange(context, intent);
|
14
|
} else if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) {
|
15
|
Uri data = intent.getData();
|
16
|
int buttonId = Integer.parseInt(data.getSchemeSpecificPart());
|
17
|
if (buttonId == BUTTON_WIFI) {
|
18
|
sWifiState.toggleState(context);
|
19
|
} else if (buttonId == BUTTON_BRIGHTNESS) {
|
20
|
toggleBrightness(context);
|
21
|
} else if (buttonId == BUTTON_SYNC) {
|
22
|
toggleSync(context);
|
23
|
} else if (buttonId == BUTTON_GPS) {
|
24
|
toggleGps(context);
|
25
|
} else if (buttonId == BUTTON_BLUETOOTH) {
|
26
|
sBluetoothState.toggleState(context);
|
27
|
}
|
28
|
/* 删去相应的事件处理代码。
|
29
|
else if (buttonId == BUTTON_MOBILE) {
|
30
|
toggleMobile(context);
|
31
|
}*/
|
32
|
} else if (TelephonyIntents.ACTION_MODEM_POWER_STATE_CHANGED.equals(intent.getAction())) {
|
33
|
} else {
|
34
|
// Don't fall-through to updating the widget. The Intent
|
35
|
// was something unrelated or that our super class took
|
36
|
// care of.
|
37
|
return ;
|
38
|
}
|
3. 重新载入图片
01
|
/**
|
02
|
* Load image for given widget and build {@link RemoteViews} for it.
|
03
|
*/
|
04
|
static RemoteViews buildUpdate(Context context, int appWidgetId) {
|
05
|
RemoteViews views = new RemoteViews(context.getPackageName(),
|
06
|
R.layout.widget);
|
07
|
views.setOnClickPendingIntent(R.id.btn_wifi, getLaunchPendingIntent(context, appWidgetId,
|
08
|
BUTTON_WIFI));
|
09
|
views.setOnClickPendingIntent(R.id.btn_brightness,
|
10
|
getLaunchPendingIntent(context,
|
11
|
appWidgetId, BUTTON_BRIGHTNESS));
|
12
|
views.setOnClickPendingIntent(R.id.btn_sync,
|
13
|
getLaunchPendingIntent(context,
|
14
|
appWidgetId, BUTTON_SYNC));
|
15
|
views.setOnClickPendingIntent(R.id.btn_bluetooth,
|
16
|
getLaunchPendingIntent(context,
|
17
|
appWidgetId, BUTTON_BLUETOOTH));
|
18
|
19
|
/* views.setOnClickPendingIntent(R.id.btn_mobile,
|
20
|
getLaunchPendingIntent(context,
|
21
|
appWidgetId, BUTTON_MOBILE)); */
|
22
|
23
|
updateButtons(views, context);
|
24
|
return views;
|
25
|
}
|
4. 还有这个,全注释掉吧。
01
|
switch (getMobileState(context)) {
|
02
|
case STATE_DISABLED:
|
03
|
views.setImageViewResource(R.id.img_mobile, R.drawable.ic_appwidget_settings_mobile_off);
|
04
|
views.setImageViewResource(R.id.ind_mobile, R.drawable.appwidget_settings_ind_off_c);
|
05
|
break ;
|
06
|
case STATE_ENABLED:
|
07
|
views.setImageViewResource(R.id.img_mobile, R.drawable.ic_appwidget_settings_mobile_on);
|
08
|
views.setImageViewResource(R.id.ind_mobile, R.drawable.appwidget_settings_ind_on_c);
|
09
|
break ;
|
10
|
case STATE_INTERMEDIATE:
|
11
|
views.setImageViewResource(R.id.img_mobile, R.drawable.ic_appwidget_settings_mobile_off);
|
12
|
views.setImageViewResource(R.id.ind_mobile, R.drawable.appwidget_settings_ind_mid_c);
|
13
|
break ;
|
14
|
}
|
android 电量控制相关推荐
- Android实现电量控制降低耗电
Android实现电量控制降低耗电? 如何才能降低Android应用程序的耗电量呢? 如何有效地控制耗电量问题? 这一个接一个的问题,都和电池的电量有关,下面我们进行详细的有关分析: Android手 ...
- 【Android 电量优化】JobScheduler 源码分析 ( JobServiceContext 源码分析 | 闭环操作总结 | 用户提交任务 | 广播接收者接受相关广播触发任务执行 )★
文章目录 一.JobServiceContext 引入 二.JobServiceContext 源码分析 三.用户在应用层如何使用 JobScheduler 四.用户提交任务 五.广播接收者监听广播触 ...
- 【Android 电量优化】JobScheduler 相关源码分析 ( JobSchedulerService 源码分析 | 任务检查 | 任务执行 )
文章目录 一.回调 StateChangedListener 接口 二.JobHandler 处理 ( 任务检查 ) 三.maybeRunPendingJobsH 方法 四.assignJobsToC ...
- 【Android 电量优化】JobScheduler 相关源码分析 ( ConnectivityController 底层源码分析 | 构造函数 | 追踪任务更新 | 注册接收者监听连接变化 )
文章目录 一.ConnectivityController 连接控制器引入 二.ConnectivityController 构造方法解析 ( 注册接收者 ) 三.mConnectivityRecei ...
- 【Android 电量优化】JobScheduler 相关源码分析 ( JobSchedulerService 源码分析 | Android 源码在线网址推荐 )
文章目录 一.JobScheduler 提交任务 schedule 方法源码分析 二.schedule(JobInfo job, int uId) 方法 三.scheduleAsPackage 方法 ...
- 【Android 电量优化】电量优化 ( 使用 AlarmManager 保持 CPU 唤醒 )
文章目录 一.AlarmManager 简介 二.使用 AlarmManager 保持 CPU 唤醒流程 ( 省电操作 ) 三.使用 WeakLock 保持 CPU 唤醒 代码示例 1.Service ...
- 【Android 电量优化】电量优化 ( Battery Historian 环境要求 | 电量分析报告 | 电量优化三原则 | 电量优化注意事项 )
文章目录 一.Battery Historian 环境要求 二.上传电量报告 三.Battery Historian 电量分析报告 四.电量优化三原则 五.电量优化注意事项 参考 Google 官方文 ...
- 【Android 电量优化】电量优化 ( 获取电量分析报告 | 阿里云服务器搭建 Battery Historian | 上传并生成分析报告 )
文章目录 一.Battery Historian 搭建环境 二.获取 Android 手机电量报告 1.重置电量状态 2.开启获取 WeakLock 信息 3.获取手机电量报告 三.阿里云服务器搭建 ...
- android保存播放进度,Android MediaPlayer控制进度播放音频
Android MediaPlayer控制进度播放音频 本文简单介绍MediaPlayer获取播放进度和设置进度播放. 1.获取音频文件的播放时间总长度 //返回的是int的毫秒级数据 /** * G ...
最新文章
- async spring 默认线程池_Spring boot注解@Async线程池实例详解
- shell 脚本 自动化
- 香肠派对电脑版_香肠派对2020先行服最新内测版(众神降临)-香肠派对2020先行服游戏下载v9.82...
- python多线程实现方法_Python3 多线程的两种实现方式
- [Javascript]基于ExplorerCanvas绘制表盘时钟
- 如何卸载删除sql2005
- mac下加速下载百度云资源
- 新闻发布系统(java实现)+论文
- nova虚拟机迁移一
- 运放输入偏置电流方向_运放-输入偏置电流与输入失调电流
- Xilinx 文件的编写
- 定位到excel最后一个非空单元格操作技巧,你一定要知道!(二)
- (C++)整型数组A[n]中的元素调整为左右两部分,其中左边所有元素为奇数,右边所有元素为偶数。时间复杂度为O(n)。
- 常见的数值积分方法 (欧拉、中值、龙格-库塔,【常用于IMU中】)
- 中国千家主要规划设计勘察单位
- 机器学习算法面经(阿里京东拼多多百度等)
- 常见的物联通讯协议(一)
- Mysql安装(转自韩顺平教育)
- 六-体系结构 Architecture
- 哈佛啥时候已经成功制造了60只人工蜜蜂?2013年么?《黑镜》第三季第六集,细思极恐
热门文章
- 冻结训练的理解与使用
- APM32 ST-LINK不能刷入
- Android 上能提高学习工作效率的应用
- 有道翻译爬虫+JS逆向
- Caused by: java.io.IOException: APR error: -730053
- 企业如何远程招聘到靠谱的程序员?--Codassium网页视频聊天工具
- 复合效应 达伦哈迪_哈迪·哈里里(Hadi Hariri):“我们需要研究新事物”
- 统计给定的n个数中,负数、零和正数的个数。
- mysql没有及时启动1053_mysql 启动 错误1053:服务没有及时响应启动或者控制请求
- 反恐精英java_使用java查询反恐精英1.6服务器信息