Android app的升级更新,安装,启动

来源:互联网 发布:淘宝商城女装新款上衣 编辑:程序博客网 时间:2024/05/07 18:43

我的思路是app开启后,先获取服务端的信息与app的version比较是否更新,或者推送通知来更新下载,

还有通过更新按钮等然后用户有可能已经下载但没安装,所以要判断是否已下载,是的话就安装,否的

话用http下载apk,在下载过程根据每次下载的量与总量来更新进度条,最后进行安装和启动程序。



public class UpdateManager {/* 下载中 */private static final int DOWNLOAD = 1;private static final int START_DOWNLOAD = 3;/* 下载结束 */private static final int DOWNLOAD_FINISH = 2;/* 下载保存路径 */// private String mSavePath;/* 记录进度条数量 */private int progress;/* 是否取消更新 */private boolean cancelUpdate = false;private Context mContext;/* 更新进度条 */private ProgressBar mProgress;private Dialog mDownloadDialog;String version;private MyHandler mHandler = new MyHandler(this, mContext) {@Overridepublic void handlerMessage(Message msg) {// TODO Auto-generated method stubswitch (msg.what) {// 正在下载case DOWNLOAD:// 设置进度条位置mProgress.setProgress(progress);break;case DOWNLOAD_FINISH:mDownloadDialog.dismiss();// 安装文件installApk();break;case START_DOWNLOAD:showNoticeDialog();break;default:break;}}};public String isdownloadapk() {String versionName = null;PackageManager pm = mContext.getPackageManager();PackageInfo pakinfo = pm.getPackageArchiveInfo(FileShowUtil.existDownlad(mContext),PackageManager.GET_ACTIVITIES);if (pakinfo != null) {// ApplicationInfo appinfo = pakinfo.applicationInfo;versionName = pakinfo.versionName;}return versionName;}public UpdateManager(Context context) {this.mContext = context;}/** * 检测软件更新 */public void checkUpdate() {//从服务器获取新版的versionname}/** * 获取软件版本号 *  * @param context * @return */@SuppressLint("NewApi")public String getVersionName() {// int versionCode = 0;String versionName = "";try {// 获取软件版本号,对应AndroidManifest.xml下android:versionNameversionName = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName;} catch (NameNotFoundException e) {e.printStackTrace();}return versionName;}/** * 显示软件更新对话框 */public void showNoticeDialog() {// 构造对话框AlertDialog.Builder builder = new Builder(mContext);builder.setTitle(R.string.soft_update_title);builder.setMessage(R.string.soft_update_info);// 更新builder.setPositiveButton(R.string.soft_update_updatebtn,new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();// 显示下载对话框showDownloadDialog();}});// 稍后更新builder.setNegativeButton(R.string.soft_update_later,new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});Dialog noticeDialog = builder.create();noticeDialog.show();}/** * 显示软件下载对话框 */private void showDownloadDialog() {// 构造软件下载对话框AlertDialog.Builder builder = new Builder(mContext);builder.setTitle(R.string.soft_updating).setCancelable(false);// 给下载对话框增加进度条final LayoutInflater inflater = LayoutInflater.from(mContext);View v = inflater.inflate(R.layout.softupdate_progress, null);mProgress = (ProgressBar) v.findViewById(R.id.update_progress);// mProgress.setProgress(0);builder.setView(v);mDownloadDialog = builder.create();mDownloadDialog.show();// 现在文件downloadApk();}/** * 显示软件安装对话框 */private void showInstallDialog() {// 构造软件下载对话框AlertDialog.Builder builder = new Builder(mContext);builder.setTitle(R.string.soft_updating).setCancelable(false);// 给下载对话框增加进度条builder.setTitle(R.string.soft_update_title);builder.setMessage("最新版已下载是否安装");builder.setPositiveButton("安装", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();// 显示下载对话框mHandler.sendEmptyMessage(DOWNLOAD_FINISH);}});// 稍后更新builder.setNegativeButton("取消", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});mDownloadDialog = builder.create();mDownloadDialog.show();}/** * 下载apk文件 */private void downloadApk() {// 启动新线程下载软件WebApiHttpUtil.get("url",new AsyncHttpResponseHandler() {@Overridepublic void onSuccess(int arg0, Header[] arg1, byte[] arg2) {// TODO Auto-generated method stubsuper.onSuccess(arg0, arg1, arg2);File file = new File(FileShowUtil.existDownlad(mContext));try {FileOutputStream outStream = new FileOutputStream(file);outStream.write(arg2);outStream.flush();outStream.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO: handle exception}mHandler.sendEmptyMessage(DOWNLOAD_FINISH);}@Overridepublic void onFailure(int statusCode, Throwable error,String content) {// TODO Auto-generated method stubsuper.onFailure(statusCode, error, content);ToastUtil.ShowMessage(mContext, "下载失败");}@Overridepublic void onProgress(int bytesWritten, int totalSize) {// TODO Auto-generated method stubsuper.onProgress(bytesWritten, totalSize);progress = (int) (((float) bytesWritten / totalSize) * 100);mHandler.sendEmptyMessage(DOWNLOAD);}});}/** * 安装APK文件 */private void installApk() {String filename = FileShowUtil.existDownlad(mContext);if (filename == null) {return;}// 通过Intent安装APK文件并启动Intent i = new Intent(Intent.ACTION_VIEW);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);i.setDataAndType(Uri.parse("file://" + filename),"application/vnd.android.package-archive");mContext.startActivity(i);// apkfile.delete();}}


0 0
原创粉丝点击