比较喜欢三星的超级省电模式,但是超级省电模式下只能添加有限的应用程序,并不能满足我的需求.
因为,有时候就想在超级省电模式下看个小说.
本来以为无法修改的,但是网上查了一下,有人写了一个超级省电模式管理器,可以实现任意添加程序的功能.所以应该能迂回实现这个功能.
以下是我个人的一些研究成果:
联想到android共享数据的组件ContentProvider,猜想添加程序列表应该是存储在数据库中,那么只要修改数据库就行.
首先,在手机上装一个PackageBrowser,定位到相应的Provider: com.sec.android.provider.emergencymode
然后,进入到数据库目录:
> adb shell
>cd /data/data/com.sec.android.provider.emergencymode/databases
可以看到有一个emergency.db 数据库,
>sqlite3 emergency.db (进入数据库)
sqlite>.tables 显示有以下tables:
alarm disabledpkg launcheradd prefsettings
android_metadata ecclist launcherdefault whitelist
注意到launcheradd 和 launcherdefault 这两个表,(整个超级省电模式apk叫 emergencylauncher)
sqlite>.schema launcherdefault
CREATE TABLE launcherdefault(package TEXT, class TEXT, position INTEGER, fixed I
NTEGER, mode INTEGER);
sqlite> select * from launcherdefault;
com.android.contacts|com.android.dialer.DialtactsActivity|0|0|1
com.android.mms|com.android.mms.ui.ConversationComposer|1|0|1
com.android.mms|com.android.mms.ui.ConversationComposer|0|0|0
com.android.contacts|com.android.contacts.activities.PeopleActivity|1|0|0
com.sec.android.app.clockpackage|com.sec.android.app.clockpackage.ClockPackage|2
|0|1
可以看到,进入超级省电模式后显示的程序都包含在这个表中, 其中fixed 列表示该程序是否可以被移除.
再看launcheradd这个表:
sqlite> .schema launcheradd
CREATE TABLE launcheradd(package TEXT, class TEXT, permission TEXT, mode INTEGER
);
sqlite> select * from launcheradd;
com.sec.android.app.sbrowser|com.sec.android.app.sbrowser.SBrowserMainActivity|1
001|1
com.sina.weibo|com.sina.weibo.SplashActivity|0000|1
com.tencent.qphone|com.tencent.sc.activity.SplashActivity|0000|1
com.tencent.mm|com.tencent.mm.ui.LauncherUI|0000|1
com.tencent.mobileqq|com.tencent.mobileqq.activity.SplashActivity|0000|1
com.sec.android.app.popupcalculator|com.sec.android.app.popupcalculator.Calculator|0000|1
com.sec.android.app.clockpackage|com.sec.android.app.clockpackage.ClockPackage|0101|1
com.samsung.android.app.memo|com.samsung.android.app.memo.Main|0001|1
com.sec.android.app.voicenote|com.sec.android.app.voicenote.main.VNMainActivity|0101|1
com.sec.android.app.sbrowser|com.sec.android.app.sbrowser.SBrowserMainActivity|1001|0
com.sec.chaton|com.sec.chaton.HomeActivity||0
com.tencent.mobileqq|com.tencent.mobileqq.activity.SplashActivity|0000|0
com.tencent.qphone|com.tencent.sc.activity.SplashActivity|0000|0
com.tencent.mm|com.tencent.mm.ui.LauncherUI|0000|0
com.sina.weibo|com.sina.weibo.SplashActivity|0000|0
点击超级省电模式添加按钮,可以看到,如果手机中有以上数据库中包含的程序,都会出现在列表里.
至此,我们就很清楚的知道,要想添加自己希望的程序,只要把程序信息添加到launcheradd这个数据表中就行,
下面,试着添加UC浏览器,这个浏览器的小说书架还是很给力的.
sqlite>insert into launcheradd values("com.UCMobile","com.UCMobile.main.UCMobile","0000",1);
执行添加命令后,查看下launcheradd表,发现信息已经添加进去了:
com.UCMobile|com.UCMobile.main.UCMobile|0000|1
重新启动下超级省电模式,点击添加按钮,发现UC浏览器已经出现在列表里面了.
最后,再做一点修改,因为默认的电话,短信,浏览器这三个图标是不可改变的,修改属性让他们可以被移除.
sqlite> update launcherdefault set fixed=0 where fixed=1;
现在,之前固定的三个图标已经可以移除了.来张截图:
(图是用eclipse截取的,所以带有颜色,实际上整个屏幕是灰色的)
最后,需要注意的是,电话和短信一定不要从主界面去除,
经过测试,其它不在列表里的程序可以随意添加,并不存在网上说的兼容性问题.