Appバージョン更新versionUpdate
20798 ワード
極客学院の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:
Dialog.xml:
説明:
(一)使用方法
(二)これはVolleyフレームワークの具体的なJarパケットであり,文章の終わりのソースコードにあり,積分を必要としない.
無料ソースダウンロード
極客学院の学習記録:
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);
}
無料ソースダウンロード