1. 程式人生 > >Android 的apk在覆蓋安裝的時如何重新讀取raw或assets目錄下的資料庫

Android 的apk在覆蓋安裝的時如何重新讀取raw或assets目錄下的資料庫

最近做的專案因為是要讀取assets目錄下的資料庫獲取資料,我就把assets目錄下的資料庫寫到/data/data/包名/databases/目錄下進行讀取,而且只是在使用者進行安裝應用啟動第一次時進行寫入,後面就不會再寫了.但是這樣出現一個問題,就是我的應用在更新時assets目錄下的資料庫也會更新,但是如果使用者不解除安裝舊版本的應用,assets目錄下的資料庫就不會重新寫入,這樣查詢的還是原來的資料,這樣更新的應用就沒有意義了,網上搜了也沒有很好的解決方法,最後我就來了一個曲線救國的方法,把這個問題解決了.

我的方法是:
在進入應用時根據versioncode判斷是否是第一次進入應用,如果是第一次進入就去判斷/data/data/包名/databases/有沒有寫出的資料庫,如果有就把它刪除,這樣就會重新去assets目錄下進行寫出,從而達到更新.

下面我就貼下我判斷是否第一次進入應用並刪除/data/data/包名/databases/下的資料庫:

//判斷app版本號是否更新 如果更新就在第一次刪除資料庫 並記錄當前的版本號 下次進入時再進行比較這樣就不會再刪除資料庫了
        try {
            PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
            int currentVersion = info.versionCode;
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this
); int lastVersion = prefs.getInt(Constants.VERSION_KEY, 0); if (currentVersion > lastVersion) { //如果當前版本大於上次版本,該版本屬於第一次啟動,就把原來的資料庫刪除 deleteFilesByDirectory(new File("/data/data/" + getPackageName() + "/databases")); //將當前版本寫入preference中,則下次啟動的時候,據此判斷,不再為首次啟動
prefs.edit().putInt(Constants.VERSION_KEY,currentVersion).commit(); } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } private void deleteFilesByDirectory(File directory) { if (directory != null && directory.exists() && directory.isDirectory()) { for (File item : directory.listFiles()) { item.delete(); } } }

歡迎大家進行指正!

相關推薦

Androidapk覆蓋安裝如何重新讀取rawassets目錄資料庫

最近做的專案因為是要讀取assets目錄下的資料庫獲取資料,我就把assets目錄下的資料庫寫到/data/data/包名/databases/目錄下進行讀取,而且只是在使用者進行安裝應用啟動第一次時進行寫入,後面就不會再寫了.但是這樣出現一個問題,就是我的應用

Android讀取打包到assets目錄的檔案

apk安裝之後會放在/data/app/**.apk目錄下,以apk形式存在,asset/res和被繫結在apk裡,並不會解壓到/data/data/YourApp目錄下去,所以我們無法直接獲取到as

Android 7.0 更新APK安裝的報錯 android.os.FileUriExposedException(已修復)

1.在網上我們能看到類似很多問題多數都存在很多相似問題,很多細節沒有講清楚 如果出現了FIleUriExposedException異常大家可以去https://developer.android.google.cn/about/versions/nougat/androi

Android 解決apk覆蓋安裝的時候,出現安裝失敗,與舊版本部相容的問題

當你的apk覆蓋安裝的時候出現下圖所示的情況, 然後點選安裝, 解決方案: 1.你需要檢查你的新舊apk所使用的簽名檔案是否是同一個。 2.檢查你的簽名檔案是否是釋出版本,debug 簽名的應用程式不能在 Android Market 上釋出,它

android APK應用安裝解除安裝

一:APK安裝解除安裝路徑及方式 APK是類似Symbian Sis或Sisx的檔案格式。通過將APK檔案直接傳到Android模擬器或Android手機中執行即可安裝。 1· Android應用安裝方式 1. 系統應用安裝――開機時完成,沒有安裝介面 2. 網路下載應用安裝

Android APK安裝

       簡述下APK的安裝過程,在文章的正式開始之前,我們需要做一些知識的補充 1:如何呼叫起安裝介面,以從sd卡安裝為例子 Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); in

android apk靜默安裝和解除安裝(2)

String pkgName = mPkgInfo.packageName; //得到包名 String[] oldName = mPm.canonicalToCurrentPackageNames(new String[] { pkgName }); if (oldName != null &&

Fiddler手機端無法訪問下載及安裝無法讀取該證書檔案

問題一:電腦正常執行Fiddler,手機輸出 ip:port 時,頁面長時間不載入。無法下載證書檔案 解決:重灌電腦端的Fiddler證書 命令輸入:certmgr.msc 查詢證書: 刪除證書 開啟Fiddler:Tools > https  重新勾取安裝

android APK應用安裝過程以及預設安裝路徑

一:安裝過程 APK是類似Symbian Sis或Sisx的檔案格式。通過將APK檔案直接傳到Android模擬器或Android手機中執行即可安裝。 Android應用安裝有如下四種方式 1.        系統應用安裝――開機時完成,沒有安裝介面

Android APK打包安裝、應用程序啟動過程、Activity啟動流程

目錄 一、Android APK的構建過程 通過IDE可以生成可以在android裝置中安裝的apk檔案,Google官方提供的構建APK的過程流程圖如下: 打包APK流程總結如下: AAPT(Android Asset Packaging Tool)工

android studio 安裝assets目錄apk包出現解析錯誤的問題

當你使用新版的android studio 直接run專案時,如果應用是需要安裝assets目錄下的apk包可能會出現以下問題: 這是因為新版的android studio中預設使用instant run,當直接run 部署到真機或者模擬器上時編譯專案可能會出現問題,導致

Android Apk靜默安裝的方法(後臺安裝

最近跟第三方一個廠家合作,我們這邊有需求讓他們給我們提供應用靜默安裝的方法(也就是不顯示介面的後臺安裝)結果垃圾公司又各種介面說做不了,一直拖延時間沒辦法只能我們自己想辦法做,這幾天我也研究了下終於有結果了,下面我把我的方法發出來。一、大概說下思路(1)利用系統應用的許可權執

STSSpring boot 可以正常啟動,但是debug啟動下面報錯,jdk重新已經安裝在非中文,無空格目錄

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 2018-05-16 11:27:33.324

Android 操作安裝包中的“assets目錄的檔案工具類

這是我在專案中常用到的一些工具,為了怕以後找不到故記錄於此。 /** * Created by LY on 2015/6/12. * 操作安裝包中的“assets”目錄下的檔案 */ public class AssetsUtils { /** * re

Android讀取assets目錄的資源 (webview載入assets的html)

1。獲取資源的輸入流 資原始檔 sample.txt 位於 $PROJECT_HOME/assets/ 目錄下,可以在 Activity 中通過 Context.getAssets().open(“sample.txt”) 方法獲取輸入流。 注意:如果資原始檔是文字檔案

Android開發 讀取assets目錄的txt檔案

/** * 讀取assets下的txt檔案,返回utf-8 String * @param context * @param fileName 不包括字尾 * @

Android讀取assets目錄所有檔案

package org.crazyit.image; import java.io.IOException; import java.io.InputStream; import android.app.Activity; import android.content.

Android讀取assets目錄的資源

1。獲取資源的輸入流 資原始檔 sample.txt 位於 $PROJECT_HOME/assets/ 目錄下,可以在 Activity 中通過 Context.getAssets().open(“sample.txt”) 方法獲取輸入流。 注意:如果資原始檔是文字檔案

npm安裝出現錯誤解決辦法及mac升級node.js

npm error  cwd.process 關閉所有terminal終端,執行下面的命令: $ sudo npm cache clean -f $ sudo npm install -g n n是用來管理node.js版本的。 mac 升級 node.js 的簡易方法。

Android Studio中讀取Assets目錄檔案

參考網址 首先,android studio 下的assets目錄檔案跟在eclipse下不一樣,所以有時候讀取assets目錄下的的檔案會無法讀取。 Android Studio中,這個assets目錄必須放在跟res同級目錄,也就是在main資料夾裡面,如下面2