RK:Provision.apk、SettingsProvider的分析、使用-飞外

https://www.cnblogs.com/mythou/p/3425570.html

https://blog.csdn.net/myfriend0/article/details/59107989

Platform: RK3288
OS: Android 5.1
Kernel: 3.10.0

一.android provision apk 分析
1.packagesappsProvisionAndroidManifest.xml

 manifest xmlns:andro package="com.android.provision"  original-package android: /  !-- For miscellaneous settings --  uses-permission android: /  uses-permission android: /  application  activity android: android:excludeFromRecents="true"  intent-filter android:priority="1"  action android: /  category android: /  category android: /  /intent-filter  /activity  /application  /manifest 

a.priority n. 优先;优先权;[数] 优先次序;优先考虑的事
intent-filter android:priority="1"
优先级比原生的Launcher优先级还要高,它会在Launcher启动前就运行起来

b.Launcher属性
category android: /
category android: /

2.packagesappsProvisionsrccomandroidprovisionDefaultActivity.java

package com.android.provision;import android.app.Activity;import android.content.ComponentName;import android.content.pm.PackageManager;import android.os.Bundle;import android.provider.Settings; * Application that sets the provisioned bit, like SetupWizard does.public class DefaultActivity extends Activity { @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); // Add a persistent setting to allow other apps to know the device has been provisioned. //添加永久性设置,以允许其他应用知道设备已配置 Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1); Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1); Settings.Global.putInt(getContentResolver(), Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 0); // remove this activity from the package manager. PackageManager pm = getPackageManager(); ComponentName name = new ComponentName(this, DefaultActivity.class); pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); // terminate the activity. finish();}

3.Provision.apk 优先于Launcher,so

二.SettingsProvider
2.1.数据分类
SettingsProvider对数据进行了分类,分别是Global、System、Secure三种类型,它们的区别如下:
Global:所有的偏好设置对系统的所有用户公开,第三方有读没有写的权限
System:包含各种各样的用户偏好系统设置
Secure:安全性的用户偏好系统设置,第三方APP有读没有写的权
2.2.数据库中的默认数据在frameworksasepackagesSettingsProvideresvaluesdefaults.xml中定义

 bool  false /bool //蓝牙 关

2.3.通过frameworksasepackagesSettingsProvidersrccomandroidproviderssettingsDatabaseHelper.java对数据库结构及初始值进行初始化
loadSecureSettings(SQLiteDatabase db)方法中加入新字段的添加代码
loadVolumeLevels()和loadSettings()的作用就是在手机第一次启动时,把手机编好设置的默认值写入到数据库settings.db

loadBooleanSetting(stmt, Settings.Global.BLUETOOTH_ON,R.bool.def_bluetooth_on);

2.4.adb 设置

adb shell settings get system screen_brightnessadb shell settings get secure default_input_methodadb shell settings put global def_package_verifier_include_adb 0 //通过USB验证应用

2.5.frameworksasecorejavaandroidproviderSettings.java 添加新变量

 /** * Run package verificaiton on apps installed through ADB/ADT/USB * 1 = perform package verification on ADB installs (default) * 0 = bypass package verification on ADB installs * @hide public static final String PACKAGE_VERIFIER_INCLUDE_ADB = "verifier_verify_adb_installs"; 

2.6. Android 5.1 frameworks默认设置 frameworksasepackagesSettingsProvideresvaluesdefaults.xml

 bool  true /bool //自动关屏 开 integer  /integer //自动关闭屏幕时间 15秒 integer  - /integer //表示休眠时间,默认如果没有修改的是6000,即6000ms的意思,6s进行休眠,在这里将其改为-1就是让其永远不休眠 bool  false /bool //飞行模式 关 bool  false /bool //电影院模式 关 !-- Comma-separated list of bluetooth, wifi, and cell. string  translatable="false" cell,bluetooth,wifi,nfc,wimax /string //在飞行模式下禁用的功能列表,用逗号分开 string  translatable="false" bluetooth,wifi,nfc /string //在飞行模式下禁用的功能列表中能手动开启的功能列表,用逗号分开 bool  true /bool //自动适应时间 开 bool  true /bool //使用24小时格式 开 bool  false /bool //自动旋转 关 !-- Default screen brightness, from to . is %. integer  /integer //默认屏幕亮度 bool  false /bool //屏幕亮度自适应 关 fraction  % /fraction //常规窗口动画的百分比值,为0时禁止窗口动画 fraction  % /fraction //activity过度窗口动画的百分比值,为0时禁止窗口动画 bool  false /bool //触动反馈 关 bool  false /bool //蓝牙 关 bool  false /bool //Wifi是否开启显示 关 bool  true /bool //安装非市场APK 开 bool  true /bool //验证应用 开 !-- Comma-separated list of location providers. Network location is off by default because it requires user opt-in via Setup Wizard or Settings. string  translatable="false" /string //位置信息访问权限 关 bool  false /bool //GPS定位 关 bool  true /bool //默认是否开启数据流量 开 bool  true /bool //是否使用USB大容量存储 开 bool  false /bool //wifi 关 !-- == never, == only when plugged in, == always integer  /integer //wifi休眠策略,2-永不修改 bool  true /bool //当用户使用网络时是否通知 是 bool  false /bool //是否启动设备备份 否 !--string  translatable="false" android/com.android.internal.backup.LocalTransport /string string  translatable="false" com.google.android.backup/.BackupTransportService /string  !-- Default value for whether or not to pulse the notification LED when there is a pending notification bool  true /bool //当有通知时LED灯是否一直闪烁 bool  true /bool //当有MountService事件时是否播放通知音 bool  false /bool //ums自动重启 关 bool  true /bool //ums启用时是否在通知栏提示 bool  true /bool //ums主机监控时显示在通知栏 !-- user interface sound effects integer  /integer //是否播放低电量声音 1--是 string  translatable="false" /system/media/audio/ui/LowBattery.ogg /string //低电量声音文件 integer  /integer //插上充电座是否播放声音 0-否 string  translatable="false" /system/media/audio/ui/Dock.ogg /string //插入家用底座时的音频文件的URI string  translatable="false" /system/media/audio/ui/Undock.ogg /string //拔出家用底座时的音频文件的URI string  translatable="false" /system/media/audio/ui/Dock.ogg /string //插入车载底座时音频文件的URI string  translatable="false" /system/media/audio/ui/Undock.ogg /string //拔出车载底座时音频文件的URI integer  /integer //锁屏是否播放声音 0--否 string  translatable="false" /system/media/audio/ui/Lock.ogg /string //锁屏声音文件 string  translatable="false" /system/media/audio/ui/Unlock.ogg /string //解锁声音文件 string  translatable="false" /system/media/audio/ui/Trusted.ogg /string  string  translatable="false" /system/media/audio/ui/WirelessChargingStarted.ogg /string //开始无线充电音频文件的URI bool  true /bool //是否禁用锁屏 bool  false /bool //设备是否已提供 integer  /integer  !-- Notifications use ringer volume bool  true /bool 是否将铃声作为通知铃声使用 !-- Default for Settings.System.VIBRATE_IN_SILENT bool  true /bool //静音模式是否震动 是 !-- Default for Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION bool  false /bool //是否启用javascript注入来增强阅读 !-- Default for Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD bool  false /bool // 在可访问模式时是否允许读出密码 !-- Default for Settings.Secure.ACCESSIBILITY_WEB_CONTENT_KEY_BINDINGS string  translatable="false"  !-- DPAD/Trackball UP - traverse previous on current axis and send an event. 0x13=0x01000100; !-- DPAD/Trackball DOWN - traverse next on current axis and send an event. 0x14=0x01010100; !-- DPAD/Trackball LEFT - traverse previous on the character navigation axis and send event. 0x15=0x02000001; !-- DPAD/Trackball RIGHT - traverse next on the character navigation axis end send event. 0x16=0x02010001; !-- Alt+DPAD/Trackball UP - go to the top of the document. 0x200000013=0x02000601; !-- Alt+DPAD/Trackball DOWN - go to the bottom of the document. 0x200000014=0x02010601; !-- Alt+DPAD/Trackball LEFT - transition from an axis to another and sends an event. !-- Axis transitions: -  0x200000015=0x03020101; !-- Alt+DPAD/Trackball RIGHT - transition from an axis to another and sends an event. !-- Axis transitions: -  0x200000016=0x03010201; !-- Alt+g - go to the previous heading and send an event. 0x200000023=0x02000301; !-- Alt+h - go to the next heading and send an event. 0x200000024=0x02010301; !-- Alt+COMMA - transition to sentence navigation axis and send an event. !-- Axis transitions: -  0x200000037=0x03070201; !-- Alt+PERIOD - transition to default web view behavior axis and send an event. !-- Axis transitions: - - -  0x200000038=0x03000701:0x03010701:0x03020701; /string  !-- Default for Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION_URL string  translatable="false"  https://ssl.gstatic.com/accessibility/javascript/android/AndroidVox_v1.js /string //WebView用来展示基本阅读的JavaScript的URL !-- Default for Settings.Secure.TOUCH_EXPLORATION_ENABLED bool  false /bool //是否启用触控探测 否 !-- Default value for Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE fraction  % /fraction //设置显示放大的百分比 !-- Default value for Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED bool  false /bool //是否启用可设置放大屏幕显示比例 否 !-- Default value for Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_AUTO_UPDATE bool  true /bool //是否允许屏幕放大比例自动更新 是 !-- Default for Settings.System.USER_ROTATION integer  /integer //屏幕旋转策略,默认启用旋转 0--否 !-- Default for Settings.Secure.DOWNLOAD_MAX_BYTES_OVER_MOBILE. = if no limit integer  - /integer //时的最大速度,以字节为单位 -1-不限制 !-- Default for Settings.Secure.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE. = if no limit integer  - /integer //时推荐的最大速度,以字节为单位 -1-不限制 !-- Default for Settings.Secure.LONG_PRESS_TIMEOUT_MILLIS integer  /integer //设置长按失效时长 500毫秒 !-- Default for Settings.System.POINTER_SPEED integer  /integer //屏幕是否可以旋转 否 !-- Default for DTMF tones enabled bool  true /bool //在拨号时拨号器是否启用DTMF音调 是 !-- M: Default for UI touch sounds disabled ,google defaulit is enable bool  false /bool //否启用触屏解锁等音效反馈 !-- Development settings bool  false /bool //当充电时,是否保持唤醒状态 否 !-- Number of retries for connecting to DHCP. Value here is the same as WifiStateMachine.DEFAULT_MAX_DHCP_RETRIES integer  /integer //最大重连次数  !-- Default for Settings.Secure.USER_SETUP_COMPLETE bool  false /bool 当前用户是否已经通过安装向导设置 否 !-- Default for Settings.Global.LOW_BATTERY_SOUND_TIMEOUT. means no timeout; battery sounds will always play is milliseconds of screen-off time after which battery sounds will not play integer  /integer //低电量声音在屏幕关闭后是否超时播放 0-代表超时毫秒 !-- Initial value for the Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS setting, which is a comma separated list of packages that no longer need confirmation for immersive mode. Override to disable immersive mode confirmation for certain packages. string  translatable="false" /string 是否需要沉浸式模式  !-- Default for Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE integer  /integer //Wifi 是否一致扫描  !-- Default for Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, ==on integer  /integer //锁屏界面上展示通知  !-- Default for Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS bool  true /bool //锁屏界面是否一直展示通知 !-- Default for Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, ==on integer  /integer  !-- Default for Settings.Global.DEVICE_NAME $$=MANUFACTURER $$=MODEL string  %$$s %$$s /string //设置多个设备名称 !-- Default for Settings.Global.DEVICE_NAME $$=MODEL string  %$$s /string //设置单个设备名称 !-- Default for Settings.Secure.WAKE_GESTURE_ENABLED bool  true /bool //手势唤醒是否可用 !-- Default for Settings.Global.GUEST_USER_ENABLED bool  true /bool //手势是否可以使用