前言:
最近的項(xiàng)目中遇到系統(tǒng)恢復(fù)了出廠設(shè)置笙瑟,data分區(qū)下的數(shù)據(jù)全被清空了,因?yàn)槟J(rèn)的sqlite數(shù)據(jù)庫(kù)是放在/data/data/包名下的database目錄下的。所以我想把數(shù)據(jù)庫(kù)路徑改下抖锥,放到SD卡上,不放到默熱的data/data包名下面碎罚,這樣系統(tǒng)就算是恢復(fù)了出廠設(shè)置數(shù)據(jù)也不會(huì)丟了磅废。
參考博客
//http://blog.csdn.net/lime110/article/details/50685095
//http://www.cnblogs.com/linjzong/p/5045839.html
閱讀下了SqliteOpenHelper的源碼,和數(shù)據(jù)庫(kù)路徑相關(guān)部分如下魂莫。
其實(shí)是調(diào)用了mContext的getDataBasePath方法还蹲,這個(gè)方法是在ContextImpl中實(shí)現(xiàn)的,再看下源碼
Android本身已經(jīng)實(shí)現(xiàn)了自定義路徑的方法了耙考,只要傳入的數(shù)據(jù)庫(kù)名是以"/"開頭后面接要存儲(chǔ)的路徑就行了谜喊。這樣就不會(huì)再在data/data/包名下的database目錄下創(chuàng)建數(shù)據(jù)庫(kù)啦。
實(shí)現(xiàn)代碼:
最后不要忘記倦始,加上SD卡的讀寫權(quán)限
一句話總結(jié):只要傳入自定義完整路徑數(shù)據(jù)庫(kù)名就OK啦斗遏。。鞋邑。诵次。