2014-09-23 51 views
2

我試圖從存儲在外部sdcard中的.apk文件升級家庭應用程序。但是,波紋管錯誤出現無窮大,然後設備自身重新啓動。從.apk文件升級home launcher應用程序

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」和升級我的家庭應用程序,它工作正常。

但是,我想升級沒有任何其他家庭應用程序安裝。 所以,任何人都可以幫助我。 謝謝。

+0

___「我想在沒有安裝任何其他家庭應用程序的情況下進行升級。」___您是什麼意思**沒有**其他家庭安裝。你想讓你的家庭應用成爲ROM的默認家庭應用嗎?如果是的話,我想這個問題會更適合http://android.stackexchange.com/ – SMR 2014-09-23 06:48:09

回答

1

我有類似的問題。在啓動程序更新過程中,android操作系統沒有運行的家庭活動。發生這種情況是因爲一個線程正在安裝,一個線程正在嘗試運行發射器並且同時運行。這個問題很容易通過創建另一個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()); 
} 
+0

我創建了另一個應用程序,當我刪除我的應用程序時啓動。謝謝 – 2014-11-10 02:00:03

0

我覺得你剛剛要刪除系統的主屏幕應用,並且只有需要UR應用程序爲默認啓動..

在這種情況下,我只好根設備移除系統應用.. 在Android的環境中,無法刪除沒有root權限的系統應用程序。