Android 7.1 异常删除data文件导致HOME键失效

平台

RK3288 + Android 7.1

问题

使用SU命令删除了/data/system/users目录下的文件后重启, HOME 无法正常返回主界面.
system_process I/WindowManager: Not starting activity because user setup is in progress: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 (has extras) }

分析

|-- frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

    private void startActivityAsUser(Intent intent, UserHandle handle) {
        if (isUserSetupComplete()) {
            mContext.startActivityAsUser(intent, handle);
        } else {
            Slog.i(TAG, "Not starting activity because user setup is in progress: " + intent);
        }
    }

	boolean isUserSetupComplete() {
        return Settings.Secure.getIntForUser(mContext.getContentResolver(),
                Settings.Secure.USER_SETUP_COMPLETE, 0, UserHandle.USER_CURRENT) != 0;
    }

Settings.Secure.USER_SETUP_COMPLETE 的值为 0?

方法1:
命令查看数据库设置的值: settings get secure user_setup_complete, 结果输出为 0

方法2:
cat /data/system/users/0/settings_secure.xml | grep user_setup

<setting id="56" name="user_setup_complete" value="0" package="com.android.provision" />

解决

使用命令设置为1:
settings put secure user_setup_complete 1

PS

  1. 以上相关命令需要有系统权限
  2. 建议仅在调试过程使用.

相关代码:

user_setup_complete 默认值设置:
|-- frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

            loadBooleanSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
                    R.bool.def_user_setup_complete);

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

	<bool name="def_user_setup_complete">false</bool>

值的修改:
|-- packages/apps/Provision/src/com/android/provision/DefaultActivity.java

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

        // 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);
		
		...
        finish();
		
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值