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.packages\apps\Provision\AndroidManifest.xml



    

    
    
    

    
        
            
                
                
                
            
        
    

a.priority n. 优先;优先权;[数] 优先次序;优先考虑的事

优先级比原生的Launcher优先级还要高,它会在Launcher启动前就运行起来

b.Launcher属性

2.packages\apps\Provision\src\com\android\provision\DefaultActivity.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.数据库中的默认数据在frameworks\base\packages\SettingsProvider\res\values\defaults.xml中定义

false//蓝牙 关

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

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

2.4.adb 设置

cat /sys/class/backlight/backlight/brightness
adb shell settings get system screen_brightness
adb shell settings get secure default_input_method
adb shell settings put secure default_input_method com.android.inputmethod.pinyin/.PinyinIME //默认PinyinIME键盘输入法
Settings.Secure.putString(getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD, "com.sohu.inputmethod.sogou/.SogouIME");
adb shell settings put global def_package_verifier_include_adb 0 //通过USB验证应用
Settings.Global.putInt(getContentResolver(), Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 0);
Settings.Secure.putString(getContentResolver(), Settings.Secure.TTS_DEFAULT_SYNTH, "com.iflytek.speechcloud");//默认讯飞tts   

2.5.使用24小时格式 

private static final String HOURS_12 = "12";
Settings.System.putString(getContentResolver(),Settings.System.TIME_12_24,HOURS_12);  

2.6.位置信息 默认精度设置为“节电”/"仅限设备"/"高精度"

< string name="def_location_providers_allowed" translatable="false">network,gps//默认设置为高精度
a. gps 则模式为”仅限设备”
b. gps,network则模式为”高精确度”
c. network 则模式为”节电”  

2.7.android 7.1 系统设置选项默认值数据库位置

cd /data/system/users/0  

2.8. android 5.1 系统设置选项默认值数据库位置
Settings参数保存在 /data/data/com.android.providers.settings/databases/settings.db里,里面有三个表global, system, secure.
通常这样查看数据

adb shell sqlite3 data/data/com.android.providers.settings/databases/settings.db "select * from secure"  

2.10.frameworks\base\core\java\android\provider\Settings.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.11.设置 显示 休眠

settings get system screen_off_timeout 

 

2.6. Android 5.1 frameworks默认设置 frameworks\base\packages\SettingsProvider\res\values\defaults.xml

    true//自动关屏   开
    //自动关闭屏幕时间 15秒
    -//表示休眠时间,默认如果没有修改的是6000,即6000ms的意思,6s进行休眠,在这里将其改为-1就是让其永远不休眠
    false//飞行模式  关
    false //电影院模式 关
    
							

相关