安卓手机卫士开发学习第一天--Splash界面

1)        功能:

a)        程序运行时显示的第一个界面,用于展示公司Logo,

b)        校验本地版本信息与服务器版本是否一致

c)        提示用户是否进行版本更新

d)        从服务器下载最新版本apk并安装

 

2)        实现:

a)        程序开始运行时获取当前版本信息             

Context.getpackageManager().getPackageInfo(Context.getPackageName,0).versionName

b)        开启子线程(主线程不能执行耗时操作)访问网络服务器,获取服务器最新版本信息

c)        通过消息返回机制Handle将访问网络的信息返回主线程

d)        版本相同时跳转到主界面(Home),版本不同时弹出更新对话框,出现ERROR时,跳转到主界面,并打印错误信息!

e)        当版本不同时,用户选择暂不更新,跳转到主界面,选择立即更新时,自动访问服务器下载最新版本apk,并调用系统包安装服务进行apk安装.

 

3)        新增文件信息:

a)        Src/Activitys 放置所有activity类

1.        HomeActivity            主界面(功能未实现)

2.        SplashActivity           Splash界面(今日实现改类所有功能)

b)        Src/Utils            放置项目开发中所有使用的工具类

1.        JsonUtils                  二次封装gson.jar 实现json数据的解析

2.        PackageInfoUtils      得到软件当前版本信息

3.        StreamTools              流的工具类

c)        Libs

1.        Gson.jar                     JSON解析框架

2.        xUtils                           多功能框架包,今日使用访问网络的HttpUtils

d)        res/drawable

1.        ic_launcher.png        软件图标

2.        splash.jpg                  Splash界面背景

e)        res/layout

1.        activity_home.xml   主界面的ui

2.        activity_splash.xml Splash页面的ui

         f)       res/values

                1.paths                                访问网络的路径信息

4)      清单文件

        a)添加了访问网络的权限

        b)添加了写入SD卡的权限

        c)声明Home主界面

        d)设置Splash全屏显示

5)      个人总结

a)        软件是支持离线工作的,所以在访问网络获取最新版本信息后,存在三种情况

1.相同或本地版本高于服务器版本,则在Splash界面停留2秒之后,应自动跳转到主界面

2.本低于服务器版本,则需要进行提示,让用户选择是否更新当前版本

3.访问网络,或获取软件版本失败等错误发生时,应跳转到主界面,并以Toast将错误码打印在屏幕上,并提醒用户练习客服解决问题

b)      设置Splash停留两秒

         1.在子线程开始访问网络时获取当前系统时间

                   Long startTime =System.currentTimeMillis();

         2.在子线程通过Handler发送消息前,获取网络访问结束的当前系统时间

                   Long endTime =System.currentTimeMillis();

3.时间在两秒

                   Long Time = endTime –startTime;

                    If(Time<2000) {

                             SystemClock.sleep(2000-Time);

                   }

c)      Gson.jar 解析json数据 需要二次封装(JsonUtils.java)

public class JsonUtils {

         /**

           * 把一个map变成json字符串

           */

         public static StringparseMapToJson(Map<?, ?> map) {

                   try {

                            Gsongson = new Gson();

                            returngson.toJson(map);

                   } catch(Exception e) {

                   }

                   return null;

         }

         /**

           * 把一个json字符串变成对象

           */

         public static<T> T parseJsonToBean(String json, Class<T> cls) {

                   Gson gson =new Gson();

                   T t = null;

                   try {

                            t =gson.fromJson(json, cls);

                   } catch(Exception e) {

                   }

                   return t;

         }

         /**

           * 把json字符串变成map

           */

         public staticHashMap<String, Object> parseJsonToMap(String json) {

                   Gson gson =new Gson();

                   Type type =new TypeToken<HashMap<String, Object>>() {

                   }.getType();

                   HashMap<String,Object> map = null;

                   try {

                            map= gson.fromJson(json, type);

                   } catch(Exception e) {

                   }

                   return map;

         }

         /**

           * 把json字符串变成集合

           */

         public staticList<?> parseJsonToList(String json, Type type) {

                   Gson gson =new Gson();

                   List<?>list = gson.fromJson(json, type);

                   return list;

         }

         /**

           * 获取json串中某个字段的值,注意,只能获取同一层级的value

           */

         public static StringgetFieldValue(String json, String key) {

                   if(TextUtils.isEmpty(json))

                            returnnull;

                   if(!json.contains(key))

                            return"";

                   JSONObjectjsonObject = null;

                   String value= null;

                   try {

                            jsonObject= new JSONObject(json);

                            value= jsonObject.getString(key);

                   } catch(JSONException e) {

                            e.printStackTrace();

                   }

                   returnvalue;

         }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值