zoukankan      html  css  js  c++  java
  • 安卓升级提示 phoneGap APK软件更新提示

    以下代码由PHP200 阿杜整理 
    package com.example.syzx;
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
     
    import org.apache.cordova.DroidGap;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.JSONArray;
    import org.json.JSONObject;
     
    import com.example.syzx.MainActivity;
    import com.example.syzx.R;
     
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.os.Handler;
    import android.os.Message;
    import android.os.StrictMode;
    import android.annotation.SuppressLint;
    import android.app.AlertDialog;
    import android.app.Dialog;
    import android.app.ProgressDialog;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.pm.PackageInfo;
    import android.content.pm.PackageManager;
    import android.content.pm.PackageManager.NameNotFoundException;
    import android.util.Log;
     
    @SuppressLint({ "HandlerLeak", "NewApi" })
    public class MainActivity extends DroidGap {
     
    String jsonurl = "http://192.168.2.100/app/version.js";
    String newVerName = "";// 新版本名称
    String downurl = "";//下载 地址
    int newVerCode = -1;// 新版本号
    String UPDATE_SERVERAPK = "yhupdate.apk";
    ProgressDialog pd = null;
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
    super.setIntegerProperty("splashscreen", R.drawable.splash);
     
    if(checkNetWorkStatus()){
    updateVersion();
    super.loadUrl("file:///android_asset/www/index.html", 3000);
    //super.loadUrl("file:///android_asset/www/test/index.html", 3000);
    }  
    }
     
     
     
     
     
     
     
    /**
    * 检测版本
    */
    public void updateVersion() {
    if (getServerVer()) {
    int verCode = this.getVerCode(this);
    if (newVerCode > verCode) {
    doNewVersionUpdate();// 更新版本
    }
    }
    }
     
    /**
    * 获得版本号
    */
    public int getVerCode(Context context) {
    int verCode = -1;
    try {
    String packName = context.getPackageName();
    verCode = context.getPackageManager().getPackageInfo(packName, 0).versionCode;
    } catch (NameNotFoundException e) {
    // TODO Auto-generated catch block
    Log.e("版本号获取异常", e.getMessage());
    }
    return verCode;
    }
     
    /**
         * 获得版本名称
         */
        public String getVerName(Context context){
            String verName = "";
            try {
             String packName = context.getPackageName();
                verName = context.getPackageManager().getPackageInfo(packName, 0).versionName;
            } catch (NameNotFoundException e) {
                Log.e("版本名称获取异常", e.getMessage());
            }
            return verName;
        }
    /**
    * 检测版本
    * @return
    * @throws Exception
    */
    public String getVerName(){
     //获取包名
     PackageManager packageManager = getPackageManager();
     
     PackageInfo packInfo = null;
    try {
    packInfo = packageManager.getPackageInfo(getPackageName(), 0);
    } catch (NameNotFoundException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    }
        return packInfo.versionName; 
     }
     
     
    /**
    * 从服务器端获得版本号与版本名称
    */
    public boolean getServerVer() {
    try {
    URL url = new URL(jsonurl);
    HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
    httpConnection.setDoInput(true);
    httpConnection.setDoOutput(true);
    httpConnection.setRequestMethod("GET");
    httpConnection.connect();
    InputStreamReader reader = new InputStreamReader(httpConnection.getInputStream());
    BufferedReader bReader = new BufferedReader(reader);
    String json = bReader.readLine();
    JSONArray array = new JSONArray(json);
    JSONObject jsonObj = array.getJSONObject(0);
    newVerCode = Integer.parseInt(jsonObj.getString("verCode"));
    newVerName = jsonObj.getString("verName");
    downurl = jsonObj.getString("downurl");
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return true;// 如果这里改为false 则不更新会退出程序
    }
    return true;
    }
     
    /**
    * 更新版本
    */
    public void doNewVersionUpdate() {
    int verCode = this.getVerCode(this);
    String verName = this.getVerName(this);
    StringBuffer sb = new StringBuffer();
    sb.append("当前版本:");
    sb.append(verName);
    sb.append(" V");
    sb.append(verCode);
    sb.append(",发现版本:");
    sb.append(newVerName);
    sb.append(" V");
    sb.append(newVerCode);
    sb.append(",是否更新?");
    Dialog dialog = new AlertDialog.Builder(this)
    .setTitle("软件更新")
    .setMessage(sb.toString())
    .setPositiveButton("更新", new DialogInterface.OnClickListener() {
     
    public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    pd = new ProgressDialog(MainActivity.this);
    pd.setTitle("正在下载");
    pd.setMessage("请稍后。。。");
    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    downFile(downurl);
    }
    })
    .setNegativeButton("暂不更新",
    new DialogInterface.OnClickListener() {
     
    public void onClick(DialogInterface dialog,
    int which) {
    // TODO Auto-generated method stub
    // finish();
    }
    }).create();
    // 显示更新框
    dialog.show();
    }
     
    /**
    * 下载apk
    */
    public void downFile(final String url) {
    pd.show();
    new Thread() {
    public void run() {
    HttpClient client = new DefaultHttpClient();
    HttpGet get = new HttpGet(url);
    HttpResponse response;
    try {
    response = client.execute(get);
    HttpEntity entity = response.getEntity();
    // long length = entity.getContentLength();
    InputStream is = entity.getContent();
    FileOutputStream fileOutputStream = null;
    if (is != null) {
    File file = new File(
    Environment.getExternalStorageDirectory(),
    UPDATE_SERVERAPK);
    fileOutputStream = new FileOutputStream(file);
    byte[] b = new byte[1024];
    int charb = -1;
    int count = 0;
    while ((charb = is.read(b)) != -1) {
    fileOutputStream.write(b, 0, charb);
    count += charb;
    }
    }
    fileOutputStream.flush();
    if (fileOutputStream != null) {
    fileOutputStream.close();
    }
    down();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }.start();
    }
     
    Handler handler = new Handler() {
     
    @Override
    public void handleMessage(Message msg) {
     
    super.handleMessage(msg);
    pd.cancel();
    update();
    }
    };
     
    /**
    * 下载完成,通过handler将下载对话框取消
    */
    public void down() {
    new Thread() {
    public void run() {
    Message message = handler.obtainMessage();
    handler.sendMessage(message);
    }
    }.start();
    }
     
     
    /**
    * 安装应用
    */
    public void update() {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(new File(Environment
    .getExternalStorageDirectory(), UPDATE_SERVERAPK)),
    "application/vnd.android.package-archive");
    startActivity(intent);
    }
     
     
    /**
    * check network Status
    * @return boolean
    */
    public boolean checkNetWorkStatus() {
    boolean result;
    ConnectivityManager cm = (ConnectivityManager) this
    .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netinfo = cm.getActiveNetworkInfo();
    if (netinfo != null && netinfo.isConnected()) { // 当前网络可用
    result = true;
    } else { // 不可用
     
    new AlertDialog.Builder(MainActivity.this)
    .setMessage("检查到没有可用的网络连接,请打开网络连接")
    .setPositiveButton("确定",
    new DialogInterface.OnClickListener() {
    public void onClick(
    DialogInterface dialoginterface, int i) {
    ComponentName cn = new ComponentName(
    "com.android.settings",
    "com.android.settings.Settings");
    Intent intent = new Intent();
    intent.setComponent(cn);
    intent.setAction("android.intent.action.VIEW");
    startActivity(intent);
    finish();
    }
    }).show();
    result = false;
    }
    return result;
    }
     
    }
  • 相关阅读:
    Juniper常用命令
    jenkins编译代码git脚本报错
    sqlserver服务器常用的性能计数器
    C语言位操作
    【转】接口技术
    【转】带参数的主函数
    进程与线程的区别和联系
    【转】进程与线程的一个简单解释
    【转】什么是堆和栈,它们在哪儿?
    【转】话说C语言const用法
  • 原文地址:https://www.cnblogs.com/aibo/p/3416316.html
Copyright © 2011-2022 走看看