Android 系统默认参数的修改(二)

来源:互联网 发布:三国志11 mac 10.12 编辑:程序博客网 时间:2024/05/16 05:02

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 && 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 

在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) 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 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))

0);}

 

loadSetting(stmt, Settings.Global.MOBILE2_DATA,

"true".equalsIgnoreCase(

SystemProperties.get("ro.com.android.mobiledata2",sim2Default))

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

0 0