2012-09-04 22 views
2

我有一堆Android設備將與自定義ROM一起刷新並提供給客戶。作爲該ROM的一部分將是一個「支持」應用程序,它與設備綁定在一起。它不能發佈到Google Play。我需要能夠爲用戶提供下載和安裝軟件更新版本的機會。我已檢查,下載並安裝已實施的代碼,但它依賴於配置的設備來啓用來自未知來源的應用程序的安裝。我需要該設備才能夠下載並安裝此特定apk,同時仍不允許安裝來自未知來源的任何其他應用程序。如何將更新推送到預先安裝的應用程序,而不允許從未知來源安裝

這可能嗎?

(編輯:澄清如何選擇的答案終於摸索)

的代碼添加到活動中是這樣的:

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() +"/update.apk")), "application/vnd.android.package-archive"); 
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); 
intent.putExtra(Intent.EXTRA_ALLOW_REPLACE, true); 

startActivityForResult(intent, 0); 

到Android清單中加入以下代碼:

<uses-permission android:name="android.permission.INSTALL_PACKAGES" /> 

安裝該應用程序後,我使用根文件瀏覽器將apk文件從/user/apps移動到/system/apps,然後重置手機後應用程序能夠自行安裝,而不會提示用戶啓用不受信任的來源。安裝提示列出了應用程序所需的權限,並提供用戶選擇安裝還是不顯示,但這很好。

回答

2

此方法僅適用於系統應用(source

嘗試通過增加和額外的現場安裝的APK。

intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); 

從未嘗試過這一點。 doc表示您需要調用startActivityforResult才能正常工作。但是這需要API級別14,也可以嘗試

intent.putExtra(Intent.EXTRA_ALLOW_REPLACE, true); 

編輯: 關於第二個想法,如果有自定義ROM,再加入shareduserid系統,您的安裝應用程序,並直接調用 任何PackageInstallerActivity呼籲安裝該應用

編輯2:

檢查此code。 OnClick用於安裝應用程序,因此將整個代碼複製到您的應用程序並添加

<uses-permission android:name="android.permission.INSTALL_PACKAGES" /> 

權限。

而對於應用程序的Android.mk添加

LOCAL_CERTIFICATE := platform 
+0

您好。我已經嘗試添加額外的字段,他們仍然沒有重寫安全性。你能告訴我更多關於shareduserid方法嗎? – LairdPleng

+0

檢查編輯。 – nandeesh

+0

嗨,感謝您的回覆,但如果您檢查該代碼中的註釋,它不會覆蓋啓用未知來源的需要,它只會提示它們更改設置 – LairdPleng

相關問題