手机卫士之Splash界面

splash: 溅,洒
定义一个SplashActivity作为一款软件的打开界面,它承担着在真正打开软件之前需完成的一些功能,如下面:

展现产品的logo提升产品的知名度
 初始化操作(创建数据库,读取配置文件)
 连接服务器检查软件授权、更新

整体取消掉标题栏:在清单文件中加一修改主题

android:theme="@android:style/Theme.Light.NoTitleBar"


自动更新的前提

  • 包名一致
  • 签名一致

1、展现产品的logo提升产品的知名度

    再打开软件之后出现软件的版本信息,名称,并设置了背景图片。

2、初始化操作

    把软件要用到的数据库初始化,读取配置文件信息,数据库只初始化一次,除   非卸载软件或者删除数据之后再会重新扫描。
  /**
       * 拷贝数据库到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(), truenew 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();     }   

这三步完成就可以进入手机的主界面了。

更多相关文章

  1. Android系统配置数据库注释(settings.db)
  2. 使用NetBeans搭建Android开发环境
  3. android studio Could not find com.android.support.constraint
  4. Andorid Dialog 示例【慢慢更新】
  5. android源码下载方式
  6. Android(安卓)SDK Manager无法更新的解决
  7. Android热更新框架Tinker无法更新?
  8. 【Android】Android(安卓)相关下载
  9. Android,一个思路实现APP版本更新

随机推荐

  1. android私有目录直接读取
  2. 【android】shape使用总结
  3. [Android] 问题记录 - Android 支持的度
  4. 浅谈android的selector,背景选择器 .
  5. 更新ADT遇到问题,requires plug-in "org.e
  6. Android 状态栏通知Notification
  7. android布局的一些知识
  8. android模块&相关技术
  9. 调试Android WebView
  10. Android跨进程通信之AIDL