2012-09-10 90 views
1

我需要開發一個帶有自動更新過程的android應用程序。我閱讀了一些帖子,並看到Intent.View從代碼安裝/更新應用程序。使用Intent.Up更新Android應用程序

它需要root訪問權限才能安裝或更新應用程序嗎?

在此先感謝

回答

1

可以觸發一個Intent將啓動一個APK安裝過程。它將啓動正常的Android軟件安裝程序,這意味着用戶將有機會接受或拒絕安裝。您不需要根設備來執行此操作,但您也無法強制用戶接受安裝。我認爲我們可以認同這將是安全模型中的一個非常糟糕的漏洞。

+0

謝謝......我測試了一下,操作視圖顯示了正常的Android軟件安裝程序,但它顯示了使用Web瀏覽器的「完成操作」。存在任何形式以避免此操作,並只顯示正常的Android安裝程序? – jcesarms15

+0

如果您使用http URL拍攝'Intent',我不認爲如果不明確地輸入Android安裝程序的軟件包名稱就可以避免這種情況。另一方面,如果您的自動更新程序下載新的APK,並觸發指向本地文件的「Intent」,則它不應該提供Web瀏覽器作爲選擇。 – Argyle

0

如果沒有root訪問權限,您可以安裝通過以下意圖應用:

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setDataAndType(Uri.fromFile(myFile)),"application/vnd.android.package-archive"); 
context.startActivity(intent); 

注意,然後用戶將被提示替換現有的應用程序,他會提示實際安裝應用程序。

如果做有root權限,您可以執行以下命令來安裝應用程序:

pm install -r {myFile.getAbsolutePath()} 

你可以使用庫RootTools(https://code.google.com/p/roottools/)通過以下方式來執行命令:

CommandCapture command = new CommandCapture(0, "pm install -r " + myFile.getAbsolutePath()); 
RootTools.getShell(true).add(command).waitForFinish(); 

請注意,應用程序在安裝後未自動啓動。也無法捕獲Install-Intent(正在安裝的應用程序將不會收到該事件)。您可以在安裝後重新啓動設備,然後捕獲ON-Boot-Intent。