[android] 手机卫士欢迎页检测更新

前端之家收集整理的这篇文章主要介绍了[android] 手机卫士欢迎页检测更新前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

客户端:去服务器获取最新的版本信息

 

服务器端:

版本信息,最新的版本2.0

最新版本的下载地址:http://xxxxxxxx/mobilesafe2.0.apk

版本的描述信息

 

客户端如果不升级新版本就进入主界面,升级新版本就替换安装

服务器端json信息

{"version":"2.0","description":"发现新版本,下载送现金","apkurl":"http://100.66.221.69/mobilesafe2.0.apk"}

 

联网请求数据

 

把服务器的地址保存在一个配置文件里面,res/values/config.xml

<string name=”serverurl”>http://xxxxxxxxxxxxxxxx</string>

 

开启子线程检查版本信息

new Thread{}.start(),重写run方法

 

获取Url对象

new获取Url对象,捕获异常错误获取配置信息数据getString(R.string.serverurl)

调用Url对象的openConnection()方法获取HttpUrlConnection对象

调用它的各种方法获取到数据

 

更新界面&处理异常

 

解析JSON

获取JSONObject对象,通过new JSONObject(string)构造方法

调用JSONObject对象的get(key)方法获取值,需要强转

descriptapkurl定义成类的成员变量

 

校验是否有新版本

当前的版本和服务端返回的版本进行判断

版本一致进入主界面

如果不同,弹出升级对话框

 

通过Handler来传递消息

Activity里面定义类的成员变量Handler,使用匿名内部类来实现handler,重写方法handleMessage()

网络访问的线程里面

获取Message对象,调用Message.obtain()方法获取已经存在的不要new

设置Message对象的what属性,设置不同的标记,定义成类常量

调用Handler对象的sendMessage()方法,参数:Message对象

处理信息

handleMessage()方法里面进行处理

switch判断不同的what标记,展示对话框和Toast跳转到主界面

 

跳转到主页

使用显式意图跳转界面

获取Intent对象,

调用startActivity()方法

关闭@R_404_340@

finish()

 

解决页面跳转太快

在联网之前定义一个开始时间startTime

联网结束定义一个结束时间endTime

相隔的时间如果小于2秒(2000),

线程休息2000减去相隔的毫秒,Thread.sleep()

 

界面跳转的动画

获取AlphaAnimation 对象,通过new出来,构造参数:

0.2f 1.0f 透明度的变化 0.21

调用AlphaAnimation 对象的setDuration()方法,设置时间,参数:毫秒

给界面的根布局定义id,找到这个控件

调用View对象的startAnimation()方法,开始动画,参数:AlphaAnimation 对象

 

 

package com.qingguow.mobilesafe;

import java.io.IOException;
 java.io.InputStream;
 java.net.HttpURLConnection;
 java.net.MalformedURLException;
 java.net.URL;

 org.json.JSONException;
 org.json.JSONObject;

 android.app.Activity;
 android.content.Intent;
 android.content.pm.PackageInfo;
 android.content.pm.PackageManager;
 android.os.Bundle;
 android.os.Handler;
 android.os.Message;
 android.util.Log;
 android.view.animation.AlphaAnimation;
 android.widget.TextView;
 android.widget.Toast;

 com.qingguow.mobilesafe.utils.StreamTools;

public class SplashActivity extends Activity {
    private static final String TAG = "SplashActivity";
    protected final int ENTER_HOME = 0int VERSION_UPDATE = 1int URL_ERROR = 2int NETWORK_ERROR = 3int JSON_ERROE = 4private TextView tv_splash_version;
     String description;
     String apkurl;
    @Override
    void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        tv_splash_version = (TextView) findViewById(R.id.tv_splash_version);
        tv_splash_version.setText("版本号" + getVersionName());
        // 检查更新
        checkVersion();
        界面动画
        AlphaAnimation aa=new AlphaAnimation(0.2f,1.0f);
        aa.setDuration(1000);
        findViewById(R.id.rl_splash_root).setAnimation(aa);
    }

    private Handler handler = new Handler() {
         handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case ENTER_HOME:
                enterHome();
                break;
             VERSION_UPDATE:
                Toast.makeText(getApplicationContext(),description,0).show();
                 URL_ERROR:
                Toast.makeText(getApplicationContext(),"URL错误",0).show();
                enterHome();
                 NETWORK_ERROR:
                Toast.makeText(getApplicationContext(),"网络错误",1)"> JSON_ERROE:
                Toast.makeText(getApplicationContext(),"JSON解析错误",1)">;
            
            }
        }

        
    };
    /**
     * 进入主页
     */
     enterHome() {
        Intent intent =new Intent(SplashActivity.this,HomeActivity.class);
        startActivity(intent);
        finish();
    };
    
     * 检查新版本
      checkVersion() {
         Thread() {
             run() {
                long startTime=System.currentTimeMillis();
                Message mes = Message.obtain();
                URL url;
                try {
                    url =  URL(getString(R.string.serverurl));
                    HttpURLConnection conn = (HttpURLConnection) url
                            .openConnection();
                    conn.setRequestMethod("GET");
                    conn.setConnectTimeout(4000);
                    int code = conn.getResponseCode();
                    if (code == 200) {
                        InputStream is = conn.getInputStream();
                        String result = StreamTools.readInputStream(is);
                        JSONObject json =  JSONObject(result);
                        String newVersion = (String) json.get("version");
                        if (newVersion.equals(getVersionName())) {
                             进入主界面
                            mes.what = ENTER_HOME;
                        } else {
                             版本更新
                            mes.what = VERSION_UPDATE;
                            description=(String) json.get("description");
                            apkurl=(String) json.get("apkurl");
                        }
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                    Log.i(TAG,"URL错误");
                    mes.what = URL_ERROR;
                }  (IOException e) {
                    e.printStackTrace();
                    Log.i(TAG,"网络连接错误" NETWORK_ERROR;
                }  (JSONException e) {
                    e.printStackTrace();
                    Log.i(TAG,"JSON解析错误" JSON_ERROE;
                } finally {
                    延迟效果
                    long endTime=System.currentTimeMillis();
                    long dTime=endTime-startTime;
                    if(dTime<3000){
                         {
                            Thread.sleep(3000-dTime);
                        }  (InterruptedException e) {
                        }
                    }
                    handler.sendMessage(mes);
                }

            };
        }.start();

    }

     获得应用版本名称
     String getVersionName() {
        PackageManager pm = getPackageManager();
         {
            PackageInfo info = pm.getPackageInfo(getPackageName(),1)">);
            return info.versionName;
        }  (Exception e) {
            e.printStackTrace();
            return "";
        }

    }
}

 

猜你在找的Android相关文章