Android自定义配置

Android自定义配置

屏幕不休眠

# 获取屏幕休眠时间
adb shell settings get system screen_off_timeout
# 休眠时间修改为最大值,最大值就是永不休眠。
adb shell settings put system screen_off_timeout 2147483647
# frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<integer name="def_screen_off_timeout">2147483647</integer> # 休眠时间修改为最大值,最大值就是永不休眠

# frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
private static final int DEFAULT_SCREEN_OFF_TIMEOUT = 15 * 1000;

private int getScreenOffTimeoutLocked(int sleepTimeout)
{
    int timeout = mScreenOffTimeoutSetting;
    if (timeout < 0)
    {
        return mMaximumScreenOffTimeoutFromDeviceAdmin;
    }
}

开机显示自定义静态LOGO

# device/qcom/common/display/logo

sudo apt-get install python-imaging
# 生成splash.img
python logo_gen.py snapdragon.png
# 烧录
fastboot flash splash splash.img
注意:如果没有烧录splash.img则显示企鹅
lk运行后,程序会bootable/bootloader/lk/dev/fbcon/fbcon.c文件中的display_image_on_screen函数,它会从splash分区获取图像数据,如果成功,就直接将splash分区中的图像数据显示在LCD上,获取失败才会调用fbcon_flush函数,该函数将imageBuffer_rgb888数组中的内容显示在LCD上。

注意

  • 图片不能过大,128*128可以
  • 背景可以透明
  • 烧录前最好先擦除
  • 如果擦除后不烧录,则显示企鹅

系统中文显示

# build/make/target/product/full_base.mk
# PRODUCT_LOCALES := en_US
PRODUCT_LOCALES := zh_CN

隐藏状态栏电量

# frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
不显示图标

# frameworks/base/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
不监听电量广播

开机不显示No SIM card 提示

#  vendor/qcom/proprietary/commonsys/telephony-apps/SimSettings/src/com/qualcomm/qti/simsettings/SimSelectNotification.java

隐藏状态栏和三大按键

1. 默认配置文件

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

添加:<string name="policy_control" translatable="false">immersive.full=*</string>

说明

  • 全屏沉浸模式(包括状态栏和虚拟按键): immersive.full=* 可下拉???
  • 沉浸状态栏:immersive.status=*
  • 沉浸虚拟按键(隐藏后底部上划可以呼出): immersive.navigation=*
  • 恢复正常模式(如果隐藏了状态栏或者虚拟按键但是又不想用了):null

2. 加载配置文件

# frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

函数 private void loadGlobalSettings(SQLiteDatabase db) 中加上如下代码:
loadStringSetting(stmt, Settings.Global.POLICY_CONTROL, R.string.policy_control);

说明

  • 从配置文件中获取值,赋值给静态变量 Settings.Global.POLICY_CONTROL
  • Settings.Global.POLICY_CONTROL 定义在:frameworks/base/core/java/android/provider/Settings.java中 public static final String POLICY_CONTROL = “policy_control”;

隐藏搜索栏

1. 在布局文件中删除

# packages/apps/Launcher3/res/layout/search_container_workspace.xml

注释
<!---
    <fragment
    android:name="com.android.launcher3.qsb.QsbContainerView$QsbFragment"
    android:layout_width="match_parent"
    android:tag="qsb_view"
    android:layout_height="match_parent"/>
-->

2. 在launcher中去掉

# packages/apps/Launcher3/src/com/android/launcher3/Workspace.java

在函数: public void bindAndInitFirstWorkspaceScreen(View qsb)/*  除去Launcher3 自带的google 搜索框
    CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, firstPage.getCountX(), 1);
    lp.canReorder = false;
    if (!firstPage.addViewToCellLayout(qsb, 0, R.id.search_container_workspace, lp, true)) {
        Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout");
    }
*/

/**
 * Initializes and binds the first page
 * @param qsb an existing qsb to recycle or null.
 */
public void bindAndInitFirstWorkspaceScreen(View qsb) {
    if (!FeatureFlags.QSB_ON_FIRST_SCREEN) {
        return;
    }
    // Add the first page
    CellLayout firstPage = insertNewWorkspaceScreen(Workspace.FIRST_SCREEN_ID, 0);
    // Always add a QSB on the first screen.
    if (qsb == null) {
        // In transposed layout, we add the QSB in the Grid. As workspace does not touch the
        // edges, we do not need a full width QSB.
        qsb = LayoutInflater.from(getContext())
                .inflate(R.layout.search_container_workspace,firstPage, false);
    }

    // CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, firstPage.getCountX(), 1);
    // lp.canReorder = false;
    // if (!firstPage.addViewToCellLayout(qsb, 0, R.id.search_container_workspace, lp, true)) {
    //     Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout");
    // }
}

关闭系统休眠

<bool name="def_dim_screen">false</bool>
不起作用,似乎没用这个配置
/**
 * 是否使屏幕常亮
 * @param activity
 */
public static void keepScreenLongLight(Activity activity) {
    boolean isOpenLight = CommSharedUtil.getInstance(activity).getBoolean(CommSharedUtil.FLAG_IS_OPEN_LONG_LIGHT, true);
    Window window = activity.getWindow();
    if (isOpenLight) {
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    } else {
        window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }
}

Launcher图标清空

目录:packages/apps/Launcher3/src/com/android/launcher3
清单:packages/apps/Launcher3/AndroidManifest.xml
Activity:packages/apps/Launcher3/src/com/android/launcher3/Launcher.java
layout:packages/apps/Launcher3/res/layout/launcher.xml

直接隐藏

# packages/apps/Launcher3/res/layout/launcher.xml

把android:id="@+id/hotseat"隐藏:
android:visibility="invisible" (还占有布局)

清空布局

# packages/apps/Launcher3/res/xml/device_profiles.xml

把适配文件device_profile.xml中的默认图标都清空

注意

  • LauncherApplication.java初始化判断屏幕大小/屏幕密度获取最接近的分辨率,选择不同的行列
  • Launcher.java
  • LauncherProvider: Launcher的数据库,一个contentprovider里面存储了桌面的item信息, loadFavorites()会解析xml 目录下的default_workspace.xml文件,把读出来的内容写到数据库中
  • LauncherModel.Java中 loadAllapps()获取到所有应用的集合.,通过包名匹配,然后直接从集合中删除掉不需要创建桌面图标的应用

默认开启以太网

添加全局变量Settings.Global

字符串定义
# frameworks/base/core/java/android/provider/Settings.java

public static final String ETHERNET_ON = "ethernet_on";

@Deprecated
public static final String ETHERNET_ON = Global.ETHERNET_ON;

// INSTANT_APP_SETTINGS.add(ETHERNET_ON);
MOVED_TO_GLOBAL.add(Settings.Global.ETHERNET_ON);

// 在SETTINGS_TO_BACKUP数组中加入这个变量
默认值
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<integer name="def_ethernet_on">1</integer>
数据库加载
# frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

loadIntegerSetting(stmt, Settings.Global.ETHERNET_ON, R.integer.def_ethernet_on);  // 设置默认值
使用
Settings.Global.getInt(getActivity().getContentResolver(),Settings.Global.SWITCH_MODE_ON, 0));
Settings.Global.putInt(getActivity().getContentResolver(),Settings.Global.SWITCH_MODE_ON, 1);

开启

# frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetServiceImpl.java

int enable = Settings.Global.getInt(mContext.getContentResolver(),Settings.Global.ETHERNET_ON,0);
Log.i(TAG, "enable="+enable);
if(enable != EthernetManager.ETH_STATE_ENABLED) {
    Log.i(TAG, "Ethernet is not enable");
    return;
}

注意

  • 编译时make update-api

默认配置

<bool name="def_dim_screen">false</bool>                          自动关屏
<bool name="def_airplane_mode_on">false</bool>                    飞行模式

<!-- Default screen brightness, from 0 to 255.  102 is 40%. -->
<integer name="def_screen_brightness">102</integer>               屏幕亮度
<bool name="def_screen_brightness_automatic_mode">false</bool>    自动亮度调节


<bool name="def_bluetooth_on">false</bool>                        蓝牙
<bool name="def_wifi_display_on">false</bool>
<bool name="def_install_non_market_apps">true</bool>              安装非市场apk
<bool name="def_package_verifier_enable">true</bool>


<bool name="assisted_gps_enabled">true</bool>                     gps定位
<bool name="def_netstats_enabled">true</bool>
<bool name="def_usb_mass_storage_enabled">true</bool>             usb存储模式
<bool name="def_wifi_on">false</bool>                             wifi
<bool name="def_networks_available_notification_on">true</bool>


<!-- Default value for whether or not to pulse the notification LED when there is a
pending notification -->
<bool name="def_notification_pulse">false</bool>                  LED闪烁

<!-- user interface sound effects -->
<integer name="def_power_sounds_enabled">0</integer>              声音
<string name="def_low_battery_sound" translatable="false">/system/media/audio/ui/LowBattery.ogg</string>
<integer name="def_dock_sounds_enabled">0</integer>
<integer name="def_dock_sounds_enabled_when_accessibility">0</integer>
<string name="def_desk_dock_sound" translatable="false">/system/media/audio/ui/Dock.ogg</string>
<string name="def_desk_undock_sound" translatable="false">/system/media/audio/ui/Undock.ogg</string>
<string name="def_car_dock_sound" translatable="false">/system/media/audio/ui/Dock.ogg</string>
<string name="def_car_undock_sound" translatable="false">/system/media/audio/ui/Undock.ogg</string>
<integer name="def_lockscreen_sounds_enabled">0</integer>
<string name="def_lock_sound" translatable="false">/system/media/audio/ui/Lock.ogg</string>
<string name="def_unlock_sound" translatable="false">/system/media/audio/ui/Unlock.ogg</string>
<string name="def_trusted_sound" translatable="false">/system/media/audio/ui/Trusted.ogg</string>
<string name="def_wireless_charging_started_sound" translatable="false">/system/media/audio/ui/WirelessChargingStarted.ogg</string>
<string name="def_charging_started_sound" translatable="false">/system/media/audio/ui/ChargingStarted.ogg</string>

<bool name="def_lockscreen_disabled">true</bool>                  不锁屏
<bool name="def_device_provisioned">false</bool>
<integer name="def_dock_audio_media_enabled">1</integer>

<!-- Notifications use ringer volume -->
<bool name="def_notifications_use_ring_volume">true</bool>        声音提醒

<!-- Default for Settings.System.VIBRATE_IN_SILENT -->
<bool name="def_vibrate_in_silent">false</bool>

<string name="def_time_12_24">24</string>                         设置时间格式     24小时制还是12小时制

测试

备注


作者 [@lhgcs]
2020 年 07月 24日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值