由於this annoying Android limitation我需要用戶重新安裝我的應用程序,以便其他應用程序檢測到清單權限。以編程方式重新安裝應用程序apk而不下載
這對用戶來說已經是令人沮喪的事了,但是除此之外,我無法看到從存儲在/ data/app的apk中重新安裝我的應用程序的方式,因此我必須將相同的版本下載到存儲卡在發射通常的安裝意圖之前。
我急切地等待有人告訴我我錯過了一些明顯的東西!我畫了一張空白...
在此先感謝。
如果您希望看到問題解決,請對問題進行解答!乾杯。
編輯:隨着@hackbod記的意見,你可以使用下面的代碼來啓動安裝對話框。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(this.getApplicationInfo().sourceDir)),
"application/vnd.android.package-archive");
startActivity(intent);
在我的果凍豆設備,這提供了兩個選項:包安裝和驗證和安裝。我不知道如果是後者將處理的問題:
- 安裝您的應用程序這種方式可能會從Play商店
我的應用程序是免費刪除其所有權,所以我無法測試的支付問題:然而
- 注意如果您的應用程序是向前鎖定(這是不可避免的開始JB,由於應用程序加密所有付費應用程序),那麼這將無法工作becau SE您的應用程序的可執行文件是不會被別人讀取
雖然hackbod結束與這表明,如果你是通過你自己的代碼執行此,爲你自己的應用程序,它是可讀的「別人讀」?如果你能測試這個,請糾正我,我錯了。
您可以將其從/ data/app複製到存儲卡。儘管無法瀏覽該目錄,但它所包含的文件通常是可讀的 - 儘管這並不能保證(並且這並不總是安裝位置)。另一種選擇可能是不使用權限系統,但嘗試對請求的包進行自己的認證。 –
謝謝克里斯 - 我的應用程序需要安裝在設備上,否則它將無法正常工作,所以我對用戶安裝位置的最小擔心。我認爲這是你所指的唯一考慮因素?另外,由於/ data/app是可讀的,我可以檢查apk是否位於其他位置之前。從我的搜索中,我無法找到一種方法來從該位置傳輸apk,除非使用根函數......想知道是否有方法...我不確定您的「自己的身份驗證」是什麼意思?乾杯。 – brandall
如果它是可讀的(就像它通常那樣),則不需要root將其複製到允許寫入的地方(例如具有適當清單許可的sdcard)。但是,/ data/app並不總是被安裝的地方。有時apk文件名在安裝過程中發生變化。您可以從/data/system/packages.xml中確定位置和安裝的名稱,但此時您對私有內部功能的相當深入,這可能不是未來的證明。真的,重新下載可能是您最好的選擇 - 至少,將其作爲後備選項。 –