android 修改电量图标(改为数字图标)
图片修改
首先我们要修改系统图标,就要联想到在framework中的资源,那么我们要修改framework中的资源的话当然必不可少的要去编译framework/base/core下的res。。。。
当然我们首先要找到对应的电量图标,然后要有你想该完之后的图标,那么你可以到网上找,到rom中提取,或则你自己做(当然比较麻烦),那么我们要精确到1%,所以我们应该有101张图片去替换原有图片(原有图片)不能精确到1%,而是5%,所以我们可以找到配置文件,在drawble/stat_sys_battery.xml文件,将原来的注释掉,修改如下:<item android:maxLevel="0" android:drawable="@android:drawable/stat_sys_battery_0" />
<item android:maxLevel="1" android:drawable="@android:drawable/stat_sys_battery_1" />
<item android:maxLevel="2" android:drawable="@android:drawable/stat_sys_battery_2" />
<item android:maxLevel="3" android:drawable="@android:drawable/stat_sys_battery_3" />
。。。。。。。
<item android:maxLevel="100" android:drawable="@android:drawable/stat_sys_battery_100" />
而且,如果你要更改充电时的图标,也可以相应的找图片替换原有充电时的图片。。。
drawble/stat_sys_battery-charge.xml的代码不用修改,但是图片要相应的替换(你可以在网上下载framework-res.apk,从其中提起出来图片再替换)。。。
当然免不了要在源码环境下编译了,首先我们要编译framework/base/core下的res,用生成的framework-res.apk替换你机器里的framework-res.apk(前提是你的手机要root过)
,其次是要编译frameworks/base/services$下的java生成system/framework/services.jar也替换手机里的services.jar,最后应该是从新编译一下SystemUI.apk再替换就可以了。。
低电分析
我们都知道android电量的一些功能很多在service中,低电量也是如此,在BatteryService.java中我们可以从jni层(当然jni层的电量也是从下层kernel接收而来,这里就不做过多分析,有兴趣的可以去深入了解一下)获得机器的电量mBatteryLevel,我们也知道当手机电量低的时候它会有警告有些还发出声音提醒你,并且太低时会自动关机!
下面简单介绍一下其流程:
在BatteryService.java中,当我们从jni获得当前电量之后,可以在 update()中做一个判断:
final boolean sendBatteryLow = !plugged
&& mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
&& mBatteryLevel <= mLowBatteryWarningLevel
&& (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel);
如果当前电量小于警告电量(在config.xml中 <integer name="config_lowBatteryWarningLevel">15</integer>)则弹出电量低提示,或者电量为0(当然这个有误差也可能是5%时就自动关机)时自动关机。
在下面会有判断是否低电量:
if (sendBatteryLow) {
mSentLowBatteryBroadcast = true;
statusIntent.setAction(Intent.ACTION_BATTERY_LOW);
mContext.sendBroadcast(statusIntent);
}
如果低电量的话就发送一个广播出去。
这段代码是电量太低而自动关机:
private final void shutdownIfNoPower() {
if (mBatteryLevel == 0 && !isPowered() && ActivityManagerNative.isSystemReady()) {
Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
}
而在StatusBarPolicy.java中会有接收广播:private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
。。。。。。。。。
里面会有判断当接受到ACTION_BATTERY_LOW时:
else if (action.equals(Intent.ACTION_BATTERY_LOW)) {
onBatteryLow(intent);
}
在StatusBarPolicy.java中会有onBatteryLow(intent)方法来处理:
private void onBatteryLow(Intent intent) {
if (SHOW_LOW_BATTERY_WARNING) {
if (false) {
Slog.d(TAG, "mPhoneState=" + mPhoneState
+ " mLowBatteryDialog=" + mLowBatteryDialog
+ " mBatteryShowLowOnEndCall=" + mBatteryShowLowOnEndCall);
}
if (SHOW_BATTERY_WARNINGS_IN_CALL || mPhoneState == TelephonyManager.CALL_STATE_IDLE) {
showLowBatteryWarning();
} else {
mBatteryShowLowOnEndCall = true;
}
}
}
然后就是弹出低电提醒的Dialog了:
private void showLowBatteryWarning() {
closeLastBatteryView();
// Show exact battery level.
CharSequence levelText = mContext.getString(
R.string.battery_low_percent_format, mBatteryLevel);
if (mBatteryLevelTextView != null) {
mBatteryLevelTextView.setText(levelText);
} else {
View v = View.inflate(mContext, R.layout.battery_low, null);
mBatteryLevelTextView=(TextView)v.findViewById(R.id.level_percent);
mBatteryLevelTextView.setText(levelText);
AlertDialog.Builder b = new AlertDialog.Builder(mContext);
b.setCancelable(true);
b.setTitle(R.string.battery_low_title);
b.setView(v);
b.setIcon(android.R.drawable.ic_dialog_alert);
b.setPositiveButton(android.R.string.ok, null);
final Intent intent = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_MULTIPLE_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
| Intent.FLAG_ACTIVITY_NO_HISTORY);
if (intent.resolveActivity(mContext.getPackageManager()) != null) {
b.setNegativeButton(R.string.battery_low_why,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mContext.startActivity(intent);
if (mLowBatteryDialog != null) {
mLowBatteryDialog.dismiss();
}
}
});
}
AlertDialog d = b.create();
d.setOnDismissListener(mLowBatteryListener);
d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
d.show();
mLowBatteryDialog = d;
}
//waring voiced
final ContentResolver cr = mContext.getContentResolver();
if (Settings.System.getInt(cr,
Settings.System.POWER_SOUNDS_ENABLED, 1) == 1)
{
final String soundPath = Settings.System.getString(cr,
Settings.System.LOW_BATTERY_SOUND);
if (soundPath != null) {
final Uri soundUri = Uri.parse("file://" + soundPath);
if (soundUri != null) {
final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri);
if (sfx != null) {
sfx.setStreamType(AudioManager.STREAM_SYSTEM);
sfx.play();
}
}
}
}
}
android 修改电量图标(改为数字图标)相关推荐
- html修改自动变回去,将Htm和Html文件图标改回默认图标
症状:后缀为Htm和Html的文件图标显示为未关联的应用程序图标,(看着很是不爽!)并且通过常用的设置文件夹属性的方式修改不起作用,右键属性里改变默认打开程序也不起作用. 病因:装了Office之后又 ...
- android 修改toolbar菜单item的icon图标
我尝试了 findviewbyid 获取 MenuItem 然后调用 setIcon 发现无效,设置 backgroundres 会把图标变的巨大,不符合要求,查资料后得到适用于actionbar的做 ...
- android修改电量颜色,android状态栏电池颜色?
鸿蒙传说 /frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerI ...
- 修改电量android,安卓手机端修改电池电量图标的教程
安卓手机端是可以给电池电量图标进行修改的,恐怕大家都不知道吧,不同的系统基本都有比一样的电量图标,这就导致了不是每一个人都喜欢同一个图标,现在我就来为大家讲解如何在手机端修改电量图标的教程. 第一步: ...
- Android图标上显示数字
Android图标上显示数字或加上数字的功能,直到Android4.4也没有实现.所以要修改系统的应用launcher来实现该效果. 之前你可能要参考其他一些博客或资料,对launcher的架构有一个 ...
- Android修改应用程序图标和名字
Android修改应用程序图标和名字 对于一个APP应用程序来说,最鲜明的就是APP的图标和名字了. 修改应用图标 在res/drawable中保存一个jpg或者png的图片文件.(png支持透明度) ...
- android修改桌面app图标,android修改桌面app图标的问题。
android修改桌面app图标的问题. 我知道配置app图标的做法是在 manifest.xml中的 android:allowBackup="true" android:ico ...
- android修改桌面app图标的问题,android修改桌面app图标的有关问题
android修改桌面app图标的问题. 我知道配置app图标的做法是在 manifest.xml中的 android:allowBackup="true" android:ico ...
- 解决Android修改APP图标无效的问题
解决Android修改APP图标无效的问题 先说结论:这是图标适配的问题 问题描述 这是我一开始的修改方式: 修改图标后,在夜神模拟器及MIUI(Android 9)真机中正常,但在Android ...
最新文章
- 综述丨七场高端报告,带你大视角看人工智能发展
- WinCE内核裁减(中文字体)及字库和内核的分离(转)
- mysql查询周数_MySQL:查询中从周数开始的周日期范围
- 阿里不让 MySQL 多表 Join ?我偏要!
- SpringMVC——Maven项目依赖包
- 并发编程之Synchronized
- 写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项
- Leetcode--319. 灯泡开关
- 作者:周园春(1975-),男,中国科学院计算机网络信息中心研究员、博士生导师...
- 大图标与小图标模式定义 winform 1110
- java 分词词频_利用word分词来对文本进行词频统计
- 河海大学计算机与信息学院 王晶晶,信息学部 计算机与信息学院
- linux下socket调试,linux 下的socket 调试工具 netcat 使用
- mysql一次更新内容大于4M时报错修改max_allowed_packet变量
- TypeScript:数组
- 《容器技术系列》一3.2 Docker Daemon的启动流程
- update-apt-xapian-index 意外关闭
- nero linux4 序列号,Nero Linux 4 Nero Linux v4.0.0.0b
- 节奏大师闪退android,安卓节奏大师进不去的原因以及详细解决办法
- 盘点≠走过场,哪些功能可以进行高效库存盘点?
热门文章
- 原码、反码、补码的转换
- 原码 反码 补码及应用
- RSS服务,theoldreader.com直搜,高效阅读器
- Word 2007 打不出汉字
- “互联网+”农技推广让种地更简单
- javax.el.PropertyNotFoundException: Property 'fullName' not found on type java.lang.String
- 如何为自己的双目系统选取相机?
- 适用于C/C++开发人员的HOOPS
- 级联查询Mybatis
- 定位做白领的能量站,中餐标准化便当品牌熙香完成1.2亿元B轮融资