Appバージョン更新versionUpdate


極客学院の30日間の無料の課程の福祉、大量のVIPはあなたの養子縁組を待っていて、オンラインでプログラミングを学びたい小さい仲間は速く来て、手は速くスタンプします
極客学院の学習記録:
Appバージョン更新手順:1、checkUpdate()//バージョンを更新する必要があるかどうかを検査する2、downLoadAPK()//新しいバージョンのAPPをダウンロードする3、installAPK()//新しいバージョンのAPPをインストールする
分析:1、オンラインとオフラインのバージョン番号を比較し、更新する必要があるかどうかを判断する:1)サーバ要求サーバのAppバージョン情報にアクセスする.2)ローカルAppバージョン情報を問い合わせる.2、更新するかどうか:1)更新が必要:ダイアログボックスを使用して、showNoticeDialog()の更新を選択するかどうかをユーザーに尋ねる.2)更新されない新しいバージョンはありません:ヒント:すでに最新バージョンで更新する必要はありません.3、更新:downLoadAPK()showDownLoadDialog() ;//現在の進捗を表示
4、インストール:installAPK;Android独自のインストール方式でインストールします.
java Code:
package com.autoupdate.zyh;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

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

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

/** * @author zyh * @version     :2015 7 28    9:10:31    : */
public class UpdateManager {

    private ProgressBar mProgressbar;
    private int mProgress;
    private Dialog mDownLoadDialog;
    private String mSavefilePath;//    APK     
    private static final String path = "http://aps.yuandaitong.com/index.php?a=seed";
    private static final int DOWNLOADING = 1;//    
    private static final int DOWNLOAD_FINISH = 2;//     
    private String mVersion_name; // APk  
    private String mVersion_code;// apk   
    private String mVersion_desc;//       
    private String mVersion_path;//    Apk   

    private boolean mIsCancel;//       

    private Context mContext;

    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            try {
                Log.i("volley", msg.toString());
                JSONObject jsonObj = (JSONObject) msg.obj;
                String jsonStr = jsonObj.getString("data");
                JSONObject obj = new JSONObject(jsonStr);
                mVersion_code = obj.getString("version_code");
                mVersion_desc = obj.getString("version_desc");
                mVersion_name = obj.getString("version_name");
                mVersion_path = obj.getString("version_path");
                if (isUpdate()) {
                    showNoticeDialog();
                } else {
                    Toast.makeText(mContext, "       ", 1).show();
                }
                Log.i("volley", mVersion_path);
            } catch (JSONException e) {
                e.printStackTrace();
            }

        };

    };

    private Handler mUpdateProgressHandler = new Handler() {
        public void handleMessage(Message msg) {

            switch (msg.what) {
            case DOWNLOADING:
                //       
                mProgressbar.setProgress(mProgress);
                break;
            case DOWNLOAD_FINISH:
                //         
                mDownLoadDialog.dismiss();
                //      apk
                installAPK();
                break;

            default:
                break;
            }

        };
    };

    public UpdateManager(Context context) {
        this.mContext = context;
    }

    /** *            */
    public void checkUpdate() {
        RequestQueue requestQueue = Volley.newRequestQueue(mContext);

        JsonObjectRequest request = new JsonObjectRequest(path, null,
                new Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Message msg = Message.obtain();
                        msg.obj = response;
                        mHandler.sendMessage(msg);

                    }

                }, new ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        requestQueue.add(request);

    }

    /* *                 * * @return */
    protected boolean isUpdate() {
        int serverVersion = Integer.valueOf(mVersion_code);
        int localVersion = 1;
        try {
            localVersion = mContext.getPackageManager().getPackageInfo(
                    "com.autoupdate.zyh", 0).versionCode;
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
        if (serverVersion > localVersion) {
            return true;
        }
        return false;
    }

    /* *           */

    protected void showNoticeDialog() {
        AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
        dialog.setTitle("  ").setMessage("     ,    
"
+ mVersion_desc) .setNegativeButton(" ", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).setPositiveButton(" ", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showDownLoadDialog(); dialog.dismiss(); } }).create().show(); } /* * */ protected void showDownLoadDialog() { View view = LayoutInflater.from(mContext).inflate( R.layout.dialog_progress, null); AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setTitle(" ").setView(view); mProgressbar = (ProgressBar) view.findViewById(R.id.id_progress); dialog.setNegativeButton(" ", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // dialog.dismiss(); mIsCancel = true;// } }); mDownLoadDialog = dialog.create(); mDownLoadDialog.show(); // TODO APK downLoadAPK(); } /* * APK */ private void downLoadAPK() { new Thread() { public void run() { InputStream in = null; FileOutputStream out = null; try { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { String SDpath = Environment .getExternalStorageDirectory() + File.separator; mSavefilePath = SDpath + "DownLoadAPKS"; File dir = new File(mSavefilePath); if (!dir.exists()) { dir.mkdir(); } HttpURLConnection conn = (HttpURLConnection) new URL( mVersion_path).openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setConnectTimeout(30 * 1000); conn.connect(); in = conn.getInputStream(); int length = conn.getContentLength(); File apkFile = new File(mSavefilePath, mVersion_name); out = new FileOutputStream(apkFile); int count = 0; byte[] buffer = new byte[1024]; while (!mIsCancel) { int numRead = in.read(buffer); count += numRead; // mProgress = (int) ((float) count / length * 100); mUpdateProgressHandler .sendEmptyMessage(DOWNLOADING); // if (numRead < 0) { mUpdateProgressHandler .sendEmptyMessage(DOWNLOAD_FINISH); break; } out.write(buffer, 0, numRead); } } } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); in.close(); } catch (Exception e2) { } } }; }.start(); } private void installAPK() { File apkFile = new File(mSavefilePath, mVersion_name); if (!apkFile.exists()) { return; } Intent intent = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse("file://" + apkFile.toString()); intent.setDataAndType(uri, "application/vnd.android.package-archive"); mContext.startActivity(intent); } }

Dialog.xml:
?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/id_progress"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

説明:
(一)使用方法
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new UpdateManager(this).checkUpdate();//   
    }

}

(二)これはVolleyフレームワークの具体的なJarパケットであり,文章の終わりのソースコードにあり,積分を必要としない.
/** *            */
    public void checkUpdate() {
        RequestQueue requestQueue = Volley.newRequestQueue(mContext);

        JsonObjectRequest request = new JsonObjectRequest(path, null,
                new Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        Message msg = Message.obtain();
                        msg.obj = response;
                        mHandler.sendMessage(msg);

                    }

                }, new ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        requestQueue.add(request);

    }

無料ソースダウンロード