情景:
做项目中发现,如果手动卸载安卓应用程序,会清除掉应用原来的数据,比如sqlite3数据库中的数据,为了避免用户卸载应用程序操作下,不会删掉原来的数据。
实现:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
}
//重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
return result;
}
//Android 4.0会调用此方法获取数据库。
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory,
DatabaseErrorHandler errorHandler) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
return result;
}
@Override
public File getDatabasePath(String name) {
File parentFile = new File(Environment.getExternalStorageDirectory() + File.separator +
"smartDB" + File.separator);
if(!parentFile.exists()){
boolean mkParentRes = parentFile.mkdirs();
}
File realDBFile = new File(parentFile,name);
if(!realDBFile.exists()){
try {
realDBFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return realDBFile;
}
}
参考资料: