程序中XXXX部分和//TODO部分根据具体项目进行修改和完善。
public class UpdateHelper {
private static final String TAG = "UpdateHelper";
private static final String FILE_PROVIDER_AUTHORITY = "XXXX";
private static final String DATA_AND_TYPE = "application/vnd.android.package-archive";
private static final String UPDATE_URL = "XXXX";
public static boolean checkForUpdated(Context context) {
boolean updated = false;
try {
int currentVersion = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
//TODO 获取服务端最新版本号,与currentVersion做比较
return updated;
}
public static void autoInstallUpdate(final Context context) {
OkGo.<File>get(UPDATE_URL).tag(context).execute(new FileCallback() {
@Override
public void onSuccess(Response<File> response) {
File file = response.body();
setPermission(file.getPath());
installApk(context, file.getPath());
}
@Override
public void onError(Response<File> response) {
super.onError(response);
//TODO 网络请求出错
}
@Override
public void onFinish() {
super.onFinish();
//TODO 网络请求结束
}
@Override
public void downloadProgress(Progress progress) {
super.downloadProgress(progress);
int fraction = (int) (progress.fraction * 100);
//TODO 下载中,显示下载进度
}
});
}
private static void installApk(Context context, String apkPath) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
File file = new File(apkPath);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
Uri apkUri = FileProvider.getUriForFile(context, FILE_PROVIDER_AUTHORITY, file);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, DATA_AND_TYPE);
} else {
Uri apkUri = Uri.fromFile(file);
intent.setDataAndType(apkUri, DATA_AND_TYPE);
}
context.startActivity(intent);
}
private static void setPermission(String filePath) {
String command = "chmod " + "777" + " " + filePath;
Runtime runtime = Runtime.getRuntime();
try {
runtime.exec(command);
} catch (IOException e) {
e.printStackTrace();
}
}
}