Android 7.1 ro.rk.install_non_market_apps屬性無效

平臺

RK3288/RK3368 + Android 7.12

問題

在舊的SDK上, 可以通過設置默認 ro.rk.install_non_market_apps=true, 默認打開安裝未知來源應用 在新的代碼上此屬性不生效

解決

diff --git a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
old mode 100644
new mode 100755
index 9ed6063..dac22e1
--- a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2522,8 +2522,13 @@ class DatabaseHelper extends SQLiteOpenHelper {
             loadStringSetting(stmt, Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS,
                         R.string.def_immersive_mode_confirmations);
 
-            loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
-                    R.bool.def_install_non_market_apps);
+            String propNonMarket = android.os.SystemProperties.get("ro.rk.install_non_market_apps");
+            if(propNonMarket.equals("true")){
+                loadSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS, "1");
+            }else{
+                loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
+                        R.bool.def_install_non_market_apps);
+            }
 
             loadBooleanSetting(stmt, Settings.Secure.WAKE_GESTURE_ENABLED,
                     R.bool.def_wake_gesture_enabled);

  • frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
    private void loadSecureSettings(SQLiteDatabase db) {
        SQLiteStatement stmt = null;
        try {
        //...省略代碼...
            String propNonMarket = android.os.SystemProperties.get("ro.rk.install_non_market_apps");
            if(propNonMarket.equals("true")){
                loadSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS, "1");
            }else{
                loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
                        R.bool.def_install_non_market_apps);
            }
		//...省略代碼...
	}

插曲

  • 剛開始加的代碼是:
            loadBooleanSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS,
                        R.bool.def_install_non_market_apps);
            String propNonMarket = android.os.SystemProperties.get("ro.rk.install_non_market_apps");
            if(propNonMarket.equals("true")){
                loadSetting(stmt, Settings.Secure.INSTALL_NON_MARKET_APPS, "1");
            }

這是無效的, 原因是, 第一行的代碼已經往數據庫裏插入了數據. 見下面SQLiteStatement 的賦值方式:

        SQLiteStatement stmt = null;
        stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
                    + " VALUES(?,?);");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章