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 updateWallpaperVisibilit y(boolean visible) {
visible = true; // always show wallpaper //
… … }
或者在所有调用updateWallpaperVisibilit
y(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::SaveImageInBackgroundTas
k 请修改构造函数中的下面代码:
// 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.getExternalStoragePublic Directory( 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中
updateWallpaperVisibilit y(boolean visible) { visible
= true; //
… … }
如果以上设置不成功,或者效果不好,还要继续check
setWorkspaceBackground(boolean
workspace);方法是否有影响,如果有的话,可以直接在此处修改
mLauncherView.setBackground(workspace ?
mWorkspaceBackgroundDraw able : 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