SplashActivity 总结

SplashActivity 只要是进行连接服务器登陆,检测是否有更新的版本.
.UI的设置,添加一个背景图片,设置TextView 进行设置版本号
SplashActivity 里面分为三大类

第一:对比版本号与服务器的版本号是否相同
         1.            先得到版本号,可以定义一个工具包 
              得到版本号是通过上下文.getPackageManager().getPackageInfo(上下文.getPackageName,0)得到整个包的包信息对象 PackageInfo info
          getPackageManager()是安卓系统应用框架层的包管理器
          再通过对象得到版本名字
    2.           再得到服务器的版本号(服务器的版本在服务器里面是通过JSON形式保存的)
     服务器是需要连接网络进行得到的,不能在主线程里面进行,所以需要开启子线程进行连接服务器
     得到访问服务器的路径,因为这个路径有可能变动,需要配置在资源文件里面,后面改动路径就不用动写的代码,在values里面创建一个config.xml,添加一个Url ,路径
     通过资源文件得到路径 getResources().getString();
     创建URL 得到conn对象  url.openConnection(); 得到的是http协议的
*      通过conn对象设置请求的方式,服务器超时的时间
*      得到状态码 conn.getResponseCode();
*      判断状态码是多少,如果是200  就是连接成功如果不是说明联网失败,
*      连接成功就要得到服务器的内容一般都是流的形式 conn.getInpitstream(); 写一个工具类将IO流转为字符串
     因为设置的是一个JSON 所以在得到字符串以后解析JSON里面的内容 
     创建一个new JSONObject的对象 通过对象.getsString()  得到里面的内容(版本号)
     得到后进行比较如果本地的版本和服务器的版本一致就直接进入主界面.如果不一致就需要进行升级
注意:所有UI更改进入主界面均要在主线程中进行,所以需要创建一个消息接收器Handler 创建一个装消息的对象Message.obtain();将消息通过handler传给主界面 如果一致的话就是SUCCESS  版本不一致,需要升级就是SHOW_UPDATE,连接失败已经各种异常都需要传递过去REEOR (写一个code区分不用的问题)
第二:在检测到版本号不一致的时候
在检测到版本号不一致需要弹出一个对话框进行选择是否进行更新
     创建对话框额API  AlertDialog.Builder  builder = new 一个Builder 来得到对话框的对象builder
     设置标题 setTitle() 设置内容setMessage() 这里的内容都是每一个新版本的内容 ,写在服务器里面直接JSON解析出来,这样的好处就是每次新的版本都不需要去改Java代码
*      然后是设置对话框的两个按钮,builder.setPositiveButton()一个是同意下载,builder.setNegativeButton(),设置里面的监听事件new DialogInterface.OnClickListener()
    一个是不同意下载,不同意下载的话直接在监听事件里面进入主界面

第三.apk文件的下载和安装

     如果是同意下载 设置监听事件重写里面的方法 
     同意下载的时候可以设置一个进度条,来表示下载的状态
    因为回调的时候是内部内,所以定义为全局变量, private ProgressDialog pd;
    当用户点击同意升级的时候进度条就可以被创建出来了 
     new ProgressDialog(上下文);
    设置为水平的方向\
    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    一定要将进度掉显示出来
    pd.show();
*      需要下载文件的话一定要创建下载的对象 导入xUtils.jar包  new HttpUtils() 得到下载对象http
     使用http.download() 下载当前的apk文件 里面有三个参数 第一个是下载的路径,通过前面JSON解析得到,第二个是存储的位置 file.getAbosolutePath(),第三个是一个回调 new RequestCallBack<File>()
*       设置下载的位置,一般都是SD卡,得到SD卡的位置 
    Environment.getExternalStorageDirectory()
*      设置存储的位置是sd卡的位置 File file.以及文件的名称,一般都是当前时间+后缀名
*      判断SD卡是否挂载 
    Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
    在回调里面重写里面的方法,再手动写一个 onLoading() 
    下载失败onFailure()
    下载失败直接就关闭进度条
    pd.dismiss()
    进入主界面
    在下载过程中 onLoading() 有一个最大值的total,当前的进度 current
    设置进度条的最大值 pd.setMax(); 当前进度 pd.setProgress()
    下载成功 onSuccess()
    进行安装apk文件
     (模板代码)
    *没有挂载的话无法进行下载直接下载失败进入主界面
因为多次使用跳转到主界面,为了方便直接抽取出来定义为一个方法,还有一些细节方面的,升级对话框,有一个小bug 如果点击其他的地方就会取消,为了防止这个问题 builder.setCancelable(false)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值