更新应用的最新版本是每个上线apk都必须有的功能。那么这个功能要怎样实现呢?一、首先我们理一下具体的思路: 1、最好采用异步请求的方式与服务器交互。即创建一个类,继承AsyncTask类。 2、判断当前的(即客户端)apk版本是否小于服务器端的apk版本,如果小于,则向服务器 ...
更新应用的最新版本是每个上线apk都必须有的功能。
那么这个功能要怎样实现呢?
一、首先我们理一下具体的思路:
1、最好采用异步请求的方式与服务器交互。即创建一个类,继承AsyncTask类。
2、判断当前的(即客户端)apk版本是否小于服务器端的apk版本,如果小于,则向服务器端发送请求下载最新版本的apk。
3、下载最新的apk后,必须在客户端创建一个路径用来存放下载好的apk文件。所以在这一步之前,需在客户端创建一个路径。
4、下载apk得花费一点时间,为了更好的用户体验,我们最好写一个进度框或一个动画显示正在下载的进度或者提示用户apk正在更新。
5、通过更新apk接口,取得服务器返回的json或
6、通过HttpClient取得服务器返回的安装包数据,保存到输入流中。
7、将安装包数据保存为一个.tmp文件。如:安装包名为news,则保存的文件名为news.tmp。
8、当安装包数据全部读取完成后,再将.tmp文件改名为以安装包名相同的文件,即news。
9、将文件news进行解压,即可得到.apk文件。
二、具体实现代码:
SettingActivity.java :
1 public class SettingActivity extends Activity { 2 private UpdateApkTask updateApkTask;// 更新apk线程 3 private ProgressDialog progressDialog;// 删除文件及数据库的load界面 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 9 setContentView(R.layout.activity_setting); 10 11 initUI(); 12 restorationDialog(); 13 14 } 15 16 protected void initUI() { 17 updateApk(); 18 } 19 20 /** 21 * 初始化progressDialog 22 */ 23 private void restorationDialog() { 24 25 progressDialog = new ProgressDialog(this); 26 progressDialog.setMessage(getString(R.string.restore_pDialog_title)); 27 progressDialog.setTitle(getString(R.string.hint)); 28 progressDialog.setCancelable(false);// 不可撤销 29 30 } 31 32 private updateApk(){ 33 stopUpdateApkTask(); 34 updateApkTask = new UpdateApkTask(); 35 FileUtils2.createFile(MyMount 36 .getImageStorageDir(SettingActivity.this)); 37 38 updateApkTask.execute(new String[] { MyMount 39 .getImageStorageDir(SettingActivity.this) }); 40 } 41 42 /** 43 * 更新程序版本线程 44 * 45 */ 46 private class UpdateApkTask extends AsyncTask<String, Integer, Boolean> { 47 48 private boolean tag = false; 49 public UpdateApkTask() { 50 progressDialog.show(); 51 progressDialog.setMessage(getString(R.string.apk_pDialog_title)); 52 } 53 54 // onPreExecute方法用于在执行后台任务前做一些UI操作 55 @Override 56 protected void onPreExecute() { 57 58 super.onPreExecute(); 59 60 } 61 62 // doInBackground方法内部执行后台任务,不可在此方法内修改UI 63 @Override 64 protected Boolean doInBackground(String... params) { 65 CodeUpdate mCodeUpdate = NetworkDataUpdate.getInstance( 66 SettingActivity.this).GetCodeUpdate(); 67 if (mCodeUpdate != null && mCodeUpdate.getUpdatePackName() != null) { 68 69 // 如果用户当前的apk版本号小于服务器中的apk版本号,则下载最新版本的apk 70 if (Float.parseFloat(VersionUtil.getVersionCode(SettingActivity.this)) < Float 71 .parseFloat(mCodeUpdate.getVersion())) { 72 tag = true; 73 String downloadPath = mCodeUpdate.getUpdatePackName();// 获取URL
/** * 安装程序 * * @param context 上下文 * @param file apk的保存路径 */ public static void openFile(Context context, File file) { try { Intent mIntent = new Intent(); mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mIntent.setAction(android.content.Intent.ACTION_VIEW); mIntent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); context.startActivity(mIntent); } catch (Exception e) { e.printStackTrace(); ToastUtils.showToast( context, context.getResources().getString( R.string.toast_openApk_error), false); } }
/** * 解密 */public class Des { private Cipher c; // 密码器
原标题:android更新应用到最新版本
关键词:Android
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。