在闪屏中处理升级。
加入两项权限:
style.xml中加入以下代码,去掉标题栏
SplashActivity:
package com.mhm.mySport;
import java.io.File;
import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class SplashActivity extends Activity {
TextView tv_version;
TextView tv_progress;
String server_v_name;
int server_v_code;
String server_v_url;
String server_v_text;
@SuppressLint("HandlerLeak")
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if(msg.what == 1) {
// 可升级
uploadDailog();
} else if(msg.what == 2) {
// Toast.makeText(SplashActivity.this, "当前已是最新版本", Toast.LENGTH_SHORT).show();
enterHome();
} else {
Toast.makeText(SplashActivity.this, "升级时遇到故障", Toast.LENGTH_SHORT).show();
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
tv_version = (TextView) findViewById(R.id.tv_version);
tv_version.setText("版本号:" + getLocalVersionName());
tv_progress= (TextView) findViewById(R.id.tv_progress);
checkVersion();
}
private void download() {
// 判断是否有SD卡且SD卡挂载
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
tv_progress.setVisibility(View.VISIBLE);
String target = Environment.getExternalStorageDirectory() + "/update.apk";
HttpUtils hu = new HttpUtils();
hu.download(server_v_url, target, new RequestCallBack() {
@Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
tv_progress.setText("下载进度:" + current / total * 100 + "%");
}
@Override
public void onSuccess(ResponseInfo arg0) {
//打开安装界面
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setDataAndType(Uri.fromFile(arg0.result), "application/vnd.android.package-archive");
// 4.0及后续版本,需加此行代码,否则安装完后不进入APP界面
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
@Override
public void onFailure(HttpException arg0, String arg1) {
Toast.makeText(SplashActivity.this, "下载失败", Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(SplashActivity.this, "没有SD卡", Toast.LENGTH_SHORT).show();
}
}
/**
* 弹出是否更新对话框
*/
private void uploadDailog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("最新版本:" + server_v_name);
builder.setMessage(server_v_text);
// 不升级不能使用该软件,尽量不用
// builder.setCancelable(false);
builder.setPositiveButton("立即更新", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
download();
}
});
builder.setNegativeButton("以后再说", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
enterHome();
}
});
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
enterHome();
}
});
builder.show();
}
private void enterHome() {
Intent intent = new Intent(this, HomeActivity.class);
startActivity(intent);
finish();
}
private String getLocalVersionName() {
PackageManager packageManager = getPackageManager();
String versionName = "1.0";
//int versionCode = 1;
try {
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
versionName = packageInfo.versionName;
//versionCode = packageInfo.versionCode;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return versionName;
}
private int getLocalVersionCode() {
PackageManager packageManager = getPackageManager();
int versionCode = 1;
try {
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
versionCode = packageInfo.versionCode;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return versionCode;
}
private void checkVersion() {
AsyncHttpClient client = new AsyncHttpClient();
String url = "http://58.216.180.114:7074/upload.json";
client.get(url, new JsonHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers,
JSONObject response) {
super.onSuccess(statusCode, headers, response);
if (statusCode == 200) {
//遍历json数组
try {
// 获取具体的一个JSONObject对象
JSONObject obj = response;
server_v_name = obj.getString("versionName");
server_v_code = obj.getInt("versionCode");
server_v_text = obj.getString("versionText");
server_v_url = obj.getString("url");
Message msg = new Message();
if(getLocalVersionCode() < server_v_code) {
msg.what = 1;
} else {
msg.what = 2;
}
handler.sendMessage(msg);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(int statusCode, Header[] headers,
String responseString, Throwable throwable) {
super.onFailure(statusCode, headers, responseString, throwable);
System.out.println("1");
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, JSONArray errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
System.out.println("2");
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
Message msg = new Message();
msg.what = 0;
handler.sendMessage(msg);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
enterHome();
super.onActivityResult(requestCode, resultCode, data);
}
}