21. 修改声音(来电、短信、通知、音乐、通话、蓝牙、FM等)的默认大小
修改frameworks/base/media/java/android/media/ AudioManager.java中的
public static final int[] DEFAULT_STREAM_VOLUME = new int[] {
5, // STREAM_VOICE_CALL
7, // STREAM_SYSTEM
7, // STREAM_RING
15, // STREAM_MUSIC
6, // STREAM_ALARM
5, // STREAM_NOTIFICATION
7, // STREAM_BLUETOOTH_SCO
7, // STREAM_SYSTEM_ENFORCED
11, // STREAM_DTMF
11, // STREAM_TTS
11 //STREAM_FM
};
Tip:在AudioService.java中设置了各个音源的最大值。
22. 修改锁屏提示音大小
请修改framework/base/core/res/res/values/config.xml 中可设置锁屏默认音量-6
可修改为-6~0之间,默认值为-6,0为最大音量,通过修改此值可以达到调节锁屏音量目的。
Tip:要注意Keyguard中是否用了此值,如果没有用此值的话,就需要修改音源文件的音量。
23. 修改状态栏透明
在Android Kitkat之后Google加入了原生的状态栏透明的效果。但是这一效果在SystemUI中,有一个property限制使其只能在大内存设备中有用。要修改状态栏透明,需要修改SystemUI和App。
1.修改frameworks/base/packages/systemui/src/com/android/systemui/statusbar/phone/ BarTransitions.java::{
public static final boolean HIGH_END = ActivityManager.isHighEndGfx() || true;
}
强制HIGH_END为true,才能使用透明效果(如果应用要求Status透明的话),可实现Google默认的透明效果(有从上到下的灰色阴影渐变效果)。
2.如果有客户要求状态栏完全透明,则继续修改
frameworks/base/packages/systemui/src/com/android/systemui/statusbar/phone/ BarTransitions.java:: BarBackgroundDrawable->draw(Canvas canvas){
if (mGradientAlpha > 0 && false ) {
mGradient.setAlpha(mGradientAlpha);
mGradient.draw(canvas);
}
}
取消状态栏的渐变效果。
3. Launcher修改:
法一:
1.如果希望维持ActionBar的存在,那么需要Style.xml中定义Theme继承一般的主题并加入下面两个属性:
true
@android:color/transparent
@null
true
true
2.AndroidManifest.xml中对Activity设置Theme节点
android:theme="@style/ TransparentTheme "
法二:
packages/apps/launcher2/src/com/android/launcher2/ Launcher.java->onCreate() {
// 判断版本号,防止出错(在apk开发中很有必要这样判断一下)
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
// 如果有底部虚拟导航栏,也设置为透明
window.setFlags(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
法三:
Style.xml中自定义主题,并设置父类为
Theme.Holo.Light.NoActionBar.TranslucentDecor
Theme.Holo.NoActionBar.TranslucentDecor
这两种主题都能实现app全屏的效果,前提是Device支持状态栏透明。
Tip:对于其他apk,如果要在应用中设置状态栏透明,以达到所谓的沉浸式状态栏,那么推荐的方法是在Java代码中去写。
如果设置了StatusBar透明时,App的内容会被上拉到从StatusBar开始,这时候需要在Layout(XML)中最最外边那一层的布局加上一个属性android:fitsSystemWindows="true"在界面的根层加入了这个属性,app的内容就可以从ActionBar的下方开始展现了。
24. 修改关机时的振动时长
修改frameworks/base/services/java/com/android/server/power/ ShutdownThread.java下的
// length of vibration before shutting down
private static final int SHUTDOWN_VIBRATE_MS = 500; // Android 原生默认500毫秒
25. 修改Launcher的应用菜单的背景
修改Google原生Launcher2的app list的透明度,只需要修改
packages/apps/launcher2/res/layout/ Apps_customize_pane.xml下的
android:background="#00000000”
26. 修改Launcher应用菜单背景透明
请修改Launcher.java 中的方法
void updateWallpaperVisibility(boolean visible) {
visible = true; // always show wallpaper
// … …
}
或者在所有调用updateWallpaperVisibility(boolean)方法的地方,传参数都为true
27. 默认关闭GPS(比较省电)
在做Qualcomm MSM8610平台项目时有这个需求.修改此项的前提是在首次开机时,没有开机向导,如果有的话,不保证能修改成功,通常会提示打开GPS以提供给Google更精准的定位以提供更好的服务,巴拉巴拉….
只需要在device下覆盖属性:
frameworks/base/packages/SettingsProvider/res/values/defaults.xml下的节点:
gps
将gps去掉就行,
Tip:
一般有 @null | gps | gps,network 这三种情况
28. 修改截屏保存位置、截屏声音、图片的命名
Android 4.4中,关于截屏的创建与保存的逻辑是在SystemUI中的,源码路径在frameworks/base/packages/systemui/src/com/android/systemui/screenshot/ 下。
修改截屏声音:
frameworks/base/packages/systemui/src/com/android/systemui/screenshot/GlobalScreenshot.java
请修改构造函数中的
// Setup the Camera shutter sound
mCameraSound = new MediaActionSound();
mCameraSound.load(MediaActionSound.SHUTTER_CLICK);
不要直接修改frameworks/base/media/java/android/media/MediaActionSound.java
修改截屏保存路径与命名:
frameworks/base/packages/systemui/src/com/android/systemui/screenshot/GlobalScreenshot.java::SaveImageInBackgroundTask
请修改构造函数中的下面代码:
// Prepare all the output metadata
mImageTime = System.currentTimeMillis();
String imageDate = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss")
.format(new Date(mImageTime));
mImageFileName = String.format(SCREENSHOT_FILE_NAME_TEMPLATE, imageDate);
mScreenshotDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES),SCREENSHOTS_DIR_NAME); mImageFilePath = new File(mScreenshotDir, mImageFileName).getAbsolutePath();
29. 修改字体大小默认为最大
请修改frameworks/base/core/java/android/content/res/Configuration.java:: setToDefaults() {
//fontScale = 1;
fontScale = 1.05;
}
需要检查设置—显示—字体大小 中的 value—array:
0.85
1.0
1.05
1.10
与设置—显示—字体大小—最大 对应的放大倍数保持一致。
Tip:要整体修改字体大小则需要考虑三方面的一致:
1. entryvalues_font_size array中的数组要排序(从小到大)
2. com.android.settings.accessibility.AccessibilitySettings.java中的LARGE_FONT_SCALE要和array中的最大值一致(辅助功能—大号字体)
3. Configuration.java中的fontScale要和数组的第二个值一致,即“普通”的值一致
30. 设置中默认打开未知来源
请修改frameworks/base/packages/SettingsProvider/res/values/defaults.xml
true
有两种方法:
1. 直接在device/project/overlay该属性节点
2. 不overlay,直接在项目中添加property属性,在代码中来控制
在.mk中添加ADDITIONAL_BUILD_PROPERTIE += ro.settings.install.nomarket = 1
在frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java中
loadBooleanSetting(stmt,Settings.Global.INSTALL_NON_MARKET_APPS,
R.bool.def_install_non_market_apps);
修改为
int nomarket
= SystemProperties.getInt("ro.settings.install.nomarket",
mContext.getResources().getBoolean(R.bool.def_install_non_market_apps) ? 1 : 0); loadSetting(stmt, Settings.Global.INSTALL_NON_MARKET_APPS,nomarket);
方法二的好处是,做差分时不用每次都去overlay,而是用过property控制,这样比较省资源,推荐第二种方法。
31. 默认使用24小时制
请在frameworks/base/packages/SettingsProvider/res/values/defaults.xml中添加节点
12
请添加DatabaseHelper.java:: loadSystemSettings(SQLiteDatabase db){
// … …
loadSetting(stmt, Settings.System.TIME_12_24,
mContext.getResources().getString(R.string.def_hour_format));
// … …
}
32. 修改默认蓝牙名称
请修改external/Bluetooth/bluedroid/btif/src/btit_dm.c::
static char btif_default_local_name[DEFAULT_LOCAL_NAME_MAX+1] = {'/0'};
修改为
static char btif_default_local_name[DEFAULT_LOCAL_NAME_MAX+1] = {'Laboo T2'};
33. Launcher让应用程序列表背景透明或半透明
请修改packages/apps/Launcher2/res/layout/apps_customize_pane.xml
1. 的android:background为
android:background="@android:color/transparent"
2.id为android:id="@+id/animation_buffer”的
FrameLayout节点中android:background="@android:color/transparent"
3. packages/apps/Launcher2/src/com/android/launcher2/Launcher.java中
updateWallpaperVisibility(boolean visible) {
visible = true;
// … …
}
如果以上设置不成功,或者效果不好,还要继续check
setWorkspaceBackground(boolean workspace);方法是否有影响,如果有的话,可以直接在此处修改
mLauncherView.setBackground(workspace ?
mWorkspaceBackgroundDrawable : null);
为
mLauncherView.setBackgroundColor(android.R.color.transparent);
34. 默认显示“开发者选项”
请修改packages/apps/Settings/src/com/android/settings/Settings.java
private void updateHeaderList(List target)
修改为 boolean showDev = true;
35. 修改日历的默认提醒时间
请修改packages/apps/calendar/res/xml/ General_preferences.xml
android:defaultValue="@string/preferences_default_reminder_default"
36. 提高输入法、虚拟按键的振动效果
1、首先,确认震动器是否是好的。如:
a、开机时候有没震动
b、写个小例子,调用如下代码
Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(200);// 手机振动(200毫秒)
2、如果如上都没效果,说明振动器问题,需要驱动查下
3、如果如上有效果,那么就很可能是设置的震动效果太弱了,可以跟随代码查下最终调用vibrator.vibrate(200)的地方括号中的值是多少,适当加大即可
输入法键盘的值(其他类型的也有)定义在config.xml中,可以看到是40,如下:
40
37. 显示虚拟按键
请修改frameworks/base/core/res/res/values/config.xml文件中
true //将这个属性设置为true
如果开不了机,就需要判断底层是否支持了;
100%有效果的方法是修改
frameworks/base/packages/systemui/src/com/android/systemui/statusbar/phone/ PhoneStatusBar.java中的
protected PhoneStatusBarView makeStatusBarView();
//boolean showNav = mWindowManagerService.hasNavigationBar();
boolean showNav = true;
Tip:
虚拟按键目前我们做的项目还没有使用过,上面两种方法都是我自己在ho9021的marvell项目中亲测通过的。
PhoneWindowManager.java中:
mHasNavigationBar =
res.getBoolean(com.android.internal.R.bool.config_showNavigationBar);
// Allow a system property to override this. Used by the emulator.
// See also hasNavigationBar().
String navBarOverride = SystemProperties.get("qemu.hw.mainkeys");
if ("1".equals(navBarOverride)) {
mHasNavigationBar = false;
} else if ("0".equals(navBarOverride)) {
mHasNavigationBar = true;
}
38. 修改USB默认选中PTP
请修改device/marvell/common/common.mk中
persist.sys.usb.config=rndis,acm,marvell_diag
修改为:persist.sys.usb.config=ptp
Tip:修改此需求,请务必与驱动工程师沟通。
39. 默认关闭数据连接
请查看下面代码
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java中
public class DatabaseHelper extends SQLiteOpenHelper {
// Mobile Data default, based on build
String sim1Default, sim2Default;
sim1Default = "true";
sim2Default = "false";
loadSetting(stmt, Settings.Global.MOBILE_DATA,
"true".equalsIgnoreCase(
SystemProperties.get("ro.com.android.mobiledata",sim1Default))
? 1 : 0);}
loadSetting(stmt, Settings.Global.MOBILE2_DATA,
"true".equalsIgnoreCase(
SystemProperties.get("ro.com.android.mobiledata2",sim2Default))
? 1 : 0);
}
所以需要在device下覆盖这两个property:
ADDITIONAL_BUILD_PROPERTIES += /
ro.com.android.mobiledata = false /
ro.com.android.mobiledata2 = false /
40. 插入耳机时禁止状态栏显示图标
请修改
/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java的updateHeadSet方法中,
修改前:mService.setIconVisibility("headset", visiable);
修改后:mService.setIconVisibility("headset", false);
41. 选择USB大容量存储模式时,直接挂载t卡到PC
第一、首先检查SystemUIService.java 在初始化时是否有对
com.android.systemui.usb.StorageNotification.class 的反射。
如果有,则去掉;
private final Class