本帖最后由 jjzhoujun2010 于 2013-10-29 10:30:08 编辑

解决方案 »

  1.   

    找一下为什么不出现了,如果有个flag把去了应该就会每次都会调用了,没有仔细看过Provision的源码;
      

  2.   


    对应的源码里面执行第一次后,设置它不可用的代码是下面这些:
            // 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);然后我试着把pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
    中的COMPONENT_ENABLED_STATE_DISABLED 改成COMPONENT_ENABLED_STATE_ENABLE, 出现的情况是不断地调用provision.apk来执行,但是确进不去首页,具体原因我不清楚,能够指导下么?谢谢。
      

  3.   


    对应的源码里面执行第一次后,设置它不可用的代码是下面这些:
            // 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);然后我试着把pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
    中的COMPONENT_ENABLED_STATE_DISABLED 改成COMPONENT_ENABLED_STATE_ENABLE, 出现的情况是不断地调用provision.apk来执行,但是确进不去首页,具体原因我不清楚,能够指导下么?谢谢。
    remove this activity from the package manager.
    这句话说明第一次以后把这个package的信息从packageManager中移除了,你只要不要他移除掉就行了,具体的我也没法帮你看和调试,你自己跟踪packageManagerService里面看看。还有除了那两个状态,还有一个吧?你试试那个!switch (newState) {
                    case COMPONENT_ENABLED_STATE_ENABLED:
                        if (!pkgSetting.enableComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    case COMPONENT_ENABLED_STATE_DISABLED:
                        if (!pkgSetting.disableComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    case COMPONENT_ENABLED_STATE_DEFAULT:
                        if (!pkgSetting.restoreComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    default:
                        Slog.e(TAG, "Invalid new component state: " + newState);
                        return;
      

  4.   

    必杀技:
            Settings.Secure.putInt(getContentResolver(), Settings.Secure.DEVICE_PROVISIONED, 1);//注掉这句话。然后reboot。
      

  5.   


    对应的源码里面执行第一次后,设置它不可用的代码是下面这些:
            // 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);然后我试着把pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
    中的COMPONENT_ENABLED_STATE_DISABLED 改成COMPONENT_ENABLED_STATE_ENABLE, 出现的情况是不断地调用provision.apk来执行,但是确进不去首页,具体原因我不清楚,能够指导下么?谢谢。
    remove this activity from the package manager.
    这句话说明第一次以后把这个package的信息从packageManager中移除了,你只要不要他移除掉就行了,具体的我也没法帮你看和调试,你自己跟踪packageManagerService里面看看。还有除了那两个状态,还有一个吧?你试试那个!switch (newState) {
                    case COMPONENT_ENABLED_STATE_ENABLED:
                        if (!pkgSetting.enableComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    case COMPONENT_ENABLED_STATE_DISABLED:
                        if (!pkgSetting.disableComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    case COMPONENT_ENABLED_STATE_DEFAULT:
                        if (!pkgSetting.restoreComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    default:
                        Slog.e(TAG, "Invalid new component state: " + newState);
                        return;我也试过使用Default的默认标志位了,效果跟使用Enabled是一样的,就会不停地调用Provision.apk里面的代码执行,从而进不去桌面。
      

  6.   


    不行,注掉依然下面还是Disabled,所以还是只能开机执行一次,而且注掉的话机器没有Provisioned的话,后续可能会有其他问题出现。
      

  7.   


    对应的源码里面执行第一次后,设置它不可用的代码是下面这些:
            // 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);然后我试着把pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
    中的COMPONENT_ENABLED_STATE_DISABLED 改成COMPONENT_ENABLED_STATE_ENABLE, 出现的情况是不断地调用provision.apk来执行,但是确进不去首页,具体原因我不清楚,能够指导下么?谢谢。
    remove this activity from the package manager.
    这句话说明第一次以后把这个package的信息从packageManager中移除了,你只要不要他移除掉就行了,具体的我也没法帮你看和调试,你自己跟踪packageManagerService里面看看。还有除了那两个状态,还有一个吧?你试试那个!switch (newState) {
                    case COMPONENT_ENABLED_STATE_ENABLED:
                        if (!pkgSetting.enableComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    case COMPONENT_ENABLED_STATE_DISABLED:
                        if (!pkgSetting.disableComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    case COMPONENT_ENABLED_STATE_DEFAULT:
                        if (!pkgSetting.restoreComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    default:
                        Slog.e(TAG, "Invalid new component state: " + newState);
                        return;我也试过使用Default的默认标志位了,效果跟使用Enabled是一样的,就会不停地调用Provision.apk里面的代码执行,从而进不去桌面。
    现在也没时间帮你看,应该不是很难修改的;
      

  8.   


    对应的源码里面执行第一次后,设置它不可用的代码是下面这些:
            // 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);然后我试着把pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP);
    中的COMPONENT_ENABLED_STATE_DISABLED 改成COMPONENT_ENABLED_STATE_ENABLE, 出现的情况是不断地调用provision.apk来执行,但是确进不去首页,具体原因我不清楚,能够指导下么?谢谢。
    remove this activity from the package manager.
    这句话说明第一次以后把这个package的信息从packageManager中移除了,你只要不要他移除掉就行了,具体的我也没法帮你看和调试,你自己跟踪packageManagerService里面看看。还有除了那两个状态,还有一个吧?你试试那个!switch (newState) {
                    case COMPONENT_ENABLED_STATE_ENABLED:
                        if (!pkgSetting.enableComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    case COMPONENT_ENABLED_STATE_DISABLED:
                        if (!pkgSetting.disableComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    case COMPONENT_ENABLED_STATE_DEFAULT:
                        if (!pkgSetting.restoreComponentLPw(className, userId)) {
                            return;
                        }
                        break;
                    default:
                        Slog.e(TAG, "Invalid new component state: " + newState);
                        return;我也试过使用Default的默认标志位了,效果跟使用Enabled是一样的,就会不停地调用Provision.apk里面的代码执行,从而进不去桌面。
    现在也没时间帮你看,应该不是很难修改的;
    我现在明白为什么改成COMPONENT_ENABLED_STATE_ENABLED的时候它会不停地调用的了,因为它的xml文件里面描述下面几行:
     <intent-filter android:priority="1">     --- 优先级比Launcher还高
     <category android:name="android.intent.category.HOME"/>    --- 第一个启动的HOME程序,以及相应HOME键。
        所以,如果是ENABLED的话,点击“返回”按键或者“HOME”键都无法使之退出来。然后我又尝试了另外的一种方法,就是Provision.apk里面还是Disabled,但是在起来Launcher后打开其他APK来利用pm enable com.android.provision/.DefaultActivity的linux命令来使能Provision,使之下次开机可以继续调用(确实可以调用),但是出现的问题是:此时点击“HOME”按键,就会立刻调用Provision.apk了,但这并不是我想要的结果,此刻我又再一次卡在这里了。。 望高手指点指点,谢谢。
     
      

  9.   

    去掉Provision.apk,让 SetupWizard.apk直接调用launcher
      

  10.   

    你有
    Android4.2.2启动向导 的源码吗