package cn.qylk.app;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.preference.PreferenceManager;
import android.widget.Toast;
import cn.qylk.R;
import cn.qylk.UpdateApkWindow;
import cn.qylk.utils.WebUtils;
/**
* 检查更新
*
* @author qylk2012<br>
*
*/
public class Update implements Callback {
static final byte NEED = 1, NONEED = 0, FAIL = -1;
/**
* 升级信息获取地址
*/
public static final String UPDATECHECKURL = "https://raw.github.com/qylk/AudioPlayer/master/version";
private Thread CheckUpdateThread = new Thread(new Runnable() {
@Override
public void run() {
ExameVerCode();
}
});
private byte code;
private Handler handler = new Handler(this);
private String info, ver, localver;
/**
* 处理检查结果
*/
public void DisplayMsg() {
if (code == NONEED) {
Toast.makeText(APP.getInstance(), R.string.noupdate,
Toast.LENGTH_LONG).show();
SharedPreferences mPerferences = PreferenceManager
.getDefaultSharedPreferences(APP.getInstance());
Editor editor = mPerferences.edit();
editor.putLong("lastcheck", System.currentTimeMillis());
editor.commit();
} else if (code == FAIL)
Toast.makeText(APP.getInstance(), R.string.networkfail,
Toast.LENGTH_LONG).show();
else
APP.getInstance().startActivity(
new Intent(APP.getInstance(), UpdateApkWindow.class)
.putExtra("ver", ver).putExtra("info", info)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
/**
* 获取最新版本号,检查是否需要更新
*/
private void ExameVerCode() {
ver = GetNewVersion();
if (ver != null) {
if (!ver.equals(localver))
code = NEED;// 需更新
else
code = NONEED;// 不需要更新
} else
code = FAIL;// 无法更新
handler.sendEmptyMessage(0);
}
/**
* 获取服务器端新版本版本号和版本信息
*
*/
public String GetNewVersion() {
try {
return ParseVersion(WebUtils.GetContent(UPDATECHECKURL, "GB2312"));
} catch (Exception e) {
return null;
}
}
@Override
public boolean handleMessage(Message msg) {
DisplayMsg();
return true;
}
/**
* 解析新版本
*
* @param jsonstr
* @return
* @throws JSONException
*/
public String ParseVersion(String jsonstr) throws JSONException {
JSONObject jsonobj = new JSONObject(jsonstr);
JSONObject version = (JSONObject) jsonobj.get("version");
String ver = (String) version.get("ver");
this.info = (String) version.get("info");
return ver;
}
/**
* start a thread
* @param context
*/
public void start(Context context) {
localver = context.getResources().getString(R.string.version);
CheckUpdateThread.start();
}
}