2012-07-23 166 views
0

這是一個艱難的問題: 假設有一個SDK在某個時間點包含在應用程序中。這款應用程序在市場上已經有相當長的一段時間了,但是自從最新的版本以後,SDK就已經集成了。因此,有獲得與SDK應用兩種方式的客戶包括:確定是否新安裝或更新

  1. 此人以前是沒有的應用程序,並下載最新版本
  2. 的人已經有安裝了舊版本的應用程序沒有SDK和SDK更新到新版本

現在,當應用程序第一次打開時,SDK如何決定應用程序是否已安裝或更新?

有些事情,我認爲,沒有成功:

  • 一個可以搜索安裝應用程序時創建,從來沒有從該點改變的文件。只需查看最後修改的字段,即可知道應用何時安裝。我在data/data /中找到了lib文件,但每次應用程序更新時它都會更新,因此沒有用處。編輯:爲什麼它的導入文件從未改變的原因是沒有辦法來訪問文件創建時間,所以我們必須確保最後修改==創建時間

  • sdk應該是兼容的與Android 1.6,所以它的< API 9,我無法訪問PackageInfo.firstInstallTime字段。

  • 我不認爲我有權訪問數據/應用程序以查看apk的iteself,但即使我可以,每當我更新應用程序時,apk都會被替換,所以最後修改會給我上次更新的時間,而不是安裝。

感謝您的幫助。

+0

阻止用戶重新安裝以前安裝的應用程序http://stackoverflow.com/q/8426963/1012284 – 2012-07-23 14:10:23

+0

對不起,但我沒有看到與我的問題的連接。 – Kuno 2012-07-23 14:51:34

回答

0

想到幾件事:

在共享首選項中存儲版本號。將其稱爲第一次安裝,如果沒有值集,則設置當前版本號(這隻會在第一次安裝時發生,也許在Application類中)。稍後,您可以檢查首選項並將其與當前版本進行比較。在更新時,您仍然會擁有第一個版本代碼,並將其與當前版本進行比較,因爲您在發佈應用更新時需要增加版本代碼。

如果SD卡上不存在文件,最好在mnt/sdcard/Android/data/com.my.package.name /中創建一個文件。用版本代碼或其他名稱命名它。然後您將獲得版本代碼和創建的時間以防萬一需要。關於該文件夾的好處是它在更新你的應用程序時仍然存在,但在卸載時會被刪除(con:我認爲該功能可以從API級別8以上獲得,您必須檢查)

與文件相同但是在手機內存的data/data/com.package.name文件夾中(數據庫也保存在那裏,您的應用程序是唯一可以訪問的應用程序 - 除非是root),卸載時一定會被刪除並在更新時保留。

使用數據庫幫助程序來存儲裏面的版本代碼和時間戳。 DB幫助程序可以跟蹤數據庫的版本。

+0

謝謝你的建設性答案。但是,只有當SDK已經包含在應用程序的先前版本中時纔有效。示例:用戶安裝不帶SDK的應用程序。應用程序通過SDK獲取更新。用戶更新他的應用。共享prefs/sdcard /數據庫中沒有以前的版本可以找到,所以它必須是一個新的安裝。實際上它是一個更新,所以我得到一個錯誤的信息。 – Kuno 2012-07-23 14:48:38