从.apk文件升级home启动器应用程序

时间:2014-09-23 06:38:55

标签: android-activity android android-package-managers

我正在尝试从存储在外部SD卡中的.apk文件升级家庭应用程序。但是,波纹管误差显示为无穷大,然后设备会自行重新启动。

09-25 11:58:44.040: I/ActivityManager(1313):   Force finishing activity ActivityRecord{4238d680 u0 com.jkpark.cluster/.MainActivity}
09-25 11:58:44.040: I/ActivityManager(1313): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.jkpark.cluster/.MainActivity} from pid 0

我猜ActivityManager启动任何家庭应用程序,当我调用事件来重新安装我的家庭应用程序时,但是没有其他家庭应用程序存在。所以ActivityManager强制启动,然后一次又一次地调用启动主应用程序。

当我安装了另一个被归类的家庭应用程序" android.intent.category.HOME"并升级我的家庭应用程序,它工作正常。

但是,我想升级而不安装任何其他家庭应用程序。 所以,任何人都可以帮助我。 谢谢。

2 个答案:

答案 0 :(得分:1)

我有类似的问题。在启动器更新过程中,android OS没有要运行的家庭活动。发生这种情况,因为一个线程正在安装,一个线程正在尝试同时运行启动器。这个问题很容易通过创建另一个Launcher来解决,让我们称之为启动器切换器。这个发射器只有一个目的 - 运行你原来的louncher。 对我来说就像魅力一样。 这是启动器切换器的代码。

    private void runLauncher() {
    if(isMyLauncherDefault()) {
        unsetThisLauncherAsDefault();
    }

    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(LAUNCHER_PACKAGE);
            startActivity(LaunchIntent);
        }
    }, TWO_SECONDS_IN_MILLISECONDS);
}

private boolean isMyLauncherDefault() {
    final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
    filter.addCategory(Intent.CATEGORY_HOME);

    List<IntentFilter> filters = new ArrayList<IntentFilter>();
    filters.add(filter);

    final String myPackageName = getPackageName();
    List<ComponentName> activities = new ArrayList<ComponentName>();
    PackageManager packageManager = (PackageManager) getPackageManager();

    packageManager.getPreferredActivities(filters, activities, LAUNCHER_SWITCHER_PACKAGE);

    if(activities.size() == NO_LAUNCHER)
        return true;

    for (ComponentName activity : activities) {
        if (myPackageName.equals(activity.getPackageName())) {
            return true;
        }
    }
    return false;
}

private void unsetThisLauncherAsDefault() {
    getPackageManager().clearPackagePreferredActivities(getPackageName());
}

答案 1 :(得分:0)

我想你只想删除系统主屏幕应用,只想将你的应用作为默认启动器..

在这种情况下,你必须root你的设备删除系统应用程序.. 在Android环境中,无法在没有root访问权限的情况下删除系统应用程序。