[mobilesafe] 03_拷贝数据库到系统目录
From Android 4.0
拷贝数据库到系统目录
|
加载外部文件的几种常见做法:
1. 放在assets目录下
InputStream is = am.open("address.db"); 不会对该文件生成id
2. 放在res目录下的raw目录下.(文件过大,不宜放在raw目录)
InputStream is =getResources().openRawResource(R.raw.address);
编译这个文件生成id
3. javase做法
InputStream is = getClassLoader().getResourceAsStream("address.db");
|
| 放在Assets目录下,然后拷贝到/data/data/包名/files/目录下 技术点: 1、放在SplashActivity,在其加载的时候,进行数据库的拷贝 2、拷贝的操作放在子线程中拷贝,像金山的放在主线程,就有一段时间是黑屏的阶段,用户体验就会很差 AssetManager assetManager = SplashActivity.this.getAssets();
InputStream inputStream = assetManager.open("phoneAddress.db");
File file = new File(SplashActivity.this.getFilesDir(), "phoneAddress.db");
FileOutputStream fos = new FileOutputStream(file); 3、仅仅在程序第一次加载的时候进行拷贝,以后就不再拷贝了,要进行文件是否存在的判断 File file = new File(SplashActivity.this.getFilesDir(),"phoneAddress.db");
if (file != null && file.exists()) {// 数据库已存在
ToastUtils.showToastInThread(this, "数据库已经存在了。");
return;
} 4、在子线程中更新UI的方便方法 activity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, msg, Toast.LENGTH_SHORT).show();
}
});
|
方式一:放在assets资产目录,访问assets中文件的写法:file:///assets/address.db |
子线程中更新UI的方便API:
|