把软件要用到的数据库初始化,读取配置文件信息,数据库只初始化一次,除
非卸载软件或者删除数据之后再会重新扫描。
/**
* 拷贝数据库到data/data/包名/files目录下,数据库的初始化
*/
copyDB("address.db");
copyDB("commonnum.db");
copyDB("antivirus.db");
/**
* 拷贝资产目录下的数据库到Android系统下
*/
private void copyDB(final String name) {
/*
* 数据库多时可能耗时,在子线程中执行
*/
new Thread(){
public void run() {
File file=new File(getFilesDir(),name);
if(file.exists()&&file.length()>0){
System.out.println("数据库已经加载过,无需在加载!");
}else{
try {
InputStream is=getAssets().open(name);
FileOutputStream fos=new FileOutputStream(file);
byte[] buffer=new byte[1024];
int len=-1;
while((len=is.read(buffer))!=-1){
fos.write(buffer, 0, len);
}
is.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
};
}.start();
}
3、连接服务器检查软件授权、更新
软件随时都可能更新,在splash界面如果发现服务器中的app更新了,就实现读取服务器中的信息,并弹出对话框让用户选择是否更新,选择更新就会自动下载新版本并自动安装替换旧版本。实现代码如下:
读取系统文件是否要更新,默认值为true
SharedPreferences
sp=getSharedPreferences(
"config"
,
MODE_PRIVATE
);
//拿到是否开启自动更新
boolean flag=sp.getBoolean("update", true);
if(flag){
checkVersion();
}else{
System.out.println("不更新");
IntentUtils.startActivityDelayAndFinish(SplashActivity.this, MainActivity.class,2000);//延迟进入主界面为了显示动画
}
下面这段是读取服务器是否有新的版本要更新
/**
*访问网络
检查是否有最新版本下载的信息
* 连接网络是耗时操作,要放在子线程中操作。
*/
private void checkVersion() {
new Thread(){
public void run() {
try {
System.out.println("线程之中--------之中");
//获取URL对象
URL url=new URL(getString(R.string.serviceurl));
System.out.println("网络地址:"+url);
//连接服务器
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
//设置请求方式
conn.setRequestMethod("GET");
//设置请求超时时间
conn.setConnectTimeout(5000);
//获得返回码
int code=conn.getResponseCode();
System.out.println("code的值-----"+code);
if(code==HTTP_OK){
System.out.println("取数据成功------之中");
//获取返回的输入流
InputStream is=conn.getInputStream();
//把一个输入流转换成字符串,
StreamUtils为一个工具类
String json=StreamUtils.readStream(is);
JSONObject jsonobj=new JSONObject(json);
int serviceversion=jsonobj.getInt("version");
String downLoadUrl=jsonobj.getString("downloadurl");
String desc=jsonobj.getString("desc");
//打印输出验证能否取到数据
System.out.println("version:-----"+serviceversion);
System.out.println("downLoad:----"+downLoadUrl);
System.out.println("version:-----"+desc);
if(serviceversion>AppInfoUtils.getAppInfoNumber(getApplication())){
System.out.println("有新版本了,进入下载新版本");
//消息处理,传递更新信息
UpdateVersion data=new UpdateVersion();
data.serviceversion=serviceversion;
data.downLoadUrl=downLoadUrl;
data.desc=desc;
Message msg=Message.obtain();
msg.obj=data;
msg.what=NEED_UDPATE;
handler.sendMessageDelayed(msg, 2000);
}else{
System.out.println("版本一致,进入主界面");
IntentUtils.startActivityDelayAndFinish(SplashActivity.this, MainActivity.class, 2000);
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
ToastUtils.show(SplashActivity.this, "URL路径错误");
} catch (IOException e) {
e.printStackTrace();
ToastUtils.show(SplashActivity.this, "网络错误");
}
catch (JSONException e) {
e.printStackTrace();
ToastUtils.show(SplashActivity.this, "服务器配置信息错误");
}
};
}.start();
}
检查到新的版本要下载更新啦
/**
*
展示下载提示对话框,首先先引入xUtils的jar包到lib
* @param msg
*/
public void showUpdateDialog(android.os.Message msg) {
UpdateVersion data=(UpdateVersion) msg.obj;
//弹出一个更新对话框
AlertDialog.Builder builder=new Builder(SplashActivity.this);
builder.setTitle("升级更新!");
builder.setMessage(data.desc);
builder.setPositiveButton("立刻升级", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//开源项目断点下载xUtils
HttpUtils http=new HttpUtils();
final File file=new File(Environment.getExternalStorageDirectory(),"xxx.apk");
http.download(data.downLoadUrl, file.getAbsolutePath(), true, new RequestCallBack(){
//下载失败
@Override
public void onFailure(HttpException arg0, String arg1) {
}
//下载成功
@Override
public void onSuccess(ResponseInfo arg0) {
//下载成功,替换安装、以下为模板代码
ToastUtils.show(SplashActivity.this, "下载成功");
Intent intent=new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);
}});
}
});
builder.setNegativeButton("下次再说", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
IntentUtils.startActivityAndFinish(SplashActivity.this,MainActivity.class);
}
});
builder.show();
}
这三步完成就可以进入手机的主界面了。