2013-03-24 164 views
2

從運行的Android應用程序中,我想請求這個相同的應用程序(1)從我的專用Web服務器重新下載,(2)重新安裝自身,然後(3)在重新安裝後自行重新啓動。重新安裝運行Android應用程序自己的APK,然後重新啓動應用程序?

我知道如何執行步驟1和2,但我還沒有想出如何執行步驟3

下載後,我做第2步所示(這裏this.apkpath有以前被設置爲下載的APK的完整路徑在我的SD卡):

try { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(new File(this.apkpath)), 
         "application/vnd.android.package-archive"); 
    this.activity.startActivity(intent); 
} 
catch (Throwable t) { 
    // handle exceptions 
} 

此代碼後成功,安裝確認對話框彈出我的屏幕上,並重新安裝發生在此確認。但是,安裝後,控制權返回到我的桌面管理器,我必須手動重新啓動我的新重新安裝的應用程序。

我可以通過編程來強制應用程序在重新安裝後自動重新啓動?

回答

0

幸運的是,在Android 3.1及更高版本上這是不可能的; you cannot simply start an application on installation。具體來說,馬克墨菲詳細說明:

應用程序必須首先由用戶通過某種活動調用。或者,您需要通過清單獲取相關廣播Intent,以便您可以在發生其中一個事件時獲得控制權並以此方式啓動您的服務。或者,您將需要讓用戶重新啓動,以便您的過濾器可以得到控制。

換句話說,您可以掛鉤到BOOT_COMPLETED,然後讓您的應用程序啓動,但這顯然需要重新啓動。

我會建議回到繪圖板並重新考慮你想在這裏完成什麼。如果你真的採取這種具體的做法,有this crummy workaround,但我敦促你不要走這條路。

另一種方法可能是通過AlarmManager安排事件。我不確定重新安裝應用程序時是否刪除了事件。

(我寫的「幸運」,因爲這種行爲是邀請來自惡意軟件的惡意使用,也不會與用戶的意圖一致。)

+0

謝謝,保羅,但我想出瞭如何做到這一點。請參閱上面添加的「addFlags」行。它會導致在安裝對話框後彈出一個打開的對話框。此時,我選擇「打開」,我的應用程序重新啓動。這足以滿足我的需求。 – NYCHippo 2013-03-24 16:22:35

+0

很高興聽到它!您應該將更改轉換爲單獨的答案,並將其標記爲已回答,以便其他具有相同問題的人員可以查看問題以及解決方法。 – 2013-03-24 16:41:36

+0

是的,當這裏的軟件允許我回答我自己的問題時,我會在5-6小時內移動更改。 – NYCHippo 2013-03-24 18:10:46

6

我想出如何重新啓動後重新安裝應用程序。在情況下,它可以幫助其他人,這裏是我做到了(注意添加「addFlags」方法之前startActivity調用):

try { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(new File(this.apkpath)), 
         "application/vnd.android.package-archive"); 
    // Add this line ... 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    this.activity.startActivity(intent); 
} 
catch (Throwable t) { 
    // handle exceptions 
} 

當我運行此,我安裝對話框後,得到一個打開請求對話框。然後我可以點擊「打開」,該應用程序將確實重新啓動。這足以滿足我的需求。

+0

非常好!我已經用ICS進行了測試,它可以工作。它是否與果凍豆或奇巧一起使用? – CelinHC 2013-11-05 14:13:30

相關問題