`

Android应用的更新检测与安装

 
阅读更多

Android应用的更新检测与安装大致步骤就是,从服务器获取应用的版本信息->与当前手机应用版本信息比较->下载最新版本应用->安装

1.从服务器获取应用的版本信息并检测是否更

 

	/*
         * 检测是否有新版本,有点话升级
	 */
	private void checkUpdate() {
		new Thread(){
			public void run() {
				Message msg=Message.obtain();
				try {
					URL url=new URL(getString(R.string.serverurl));
					//联网
					try {
						HttpsURLConnection conn=(HttpsURLConnection) url.openConnection();
						//设置请求方法
						conn.setRequestMethod("GET");
						//设置联网超时时间为4秒
						conn.setConnectTimeout(4000);  
						int code=conn.getResponseCode();
						if(code==200){
							//联网成功
							InputStream is=conn.getInputStream();
							//将流转换成数据串
							String result=StreamTools.readFromStream(is);
							try {
								JSONObject obj=new JSONObject(result);
								//获取服务器版本信息
								String version=obj.getString("version");
								String apkurl=obj.getString("apkurl");
								String discription=obj.getString("discription");
								//校验是否有新版本
								if(getVersionName().equals(version)){
									//版本一致,没有新版本,进入主页面
									mse.what=ENTER_HOME;
								}else{
									//有新版本,弹出升级对话框
									msg.what=SHOW_UPDATE_DIALOG;
								}
							} catch (JSONException e) {
								msg.what=JSON_ERROR;
								e.printStackTrace();
							}
						}
					} catch (IOException e) {
						msg.what=NETWORK_ERROR;
						e.printStackTrace();
					}
				} catch (MalformedURLException e) {
					msg.what=URL_ERROR;
					e.printStackTrace();
				}finally{
					handler.sendMessage(msg);
				}
			};
		}.start();
		
	}
 /**
	 * 获取版本信息
	 */
	private String getVersionName() {
		// 用于管理手机的APK
		PackageManager pm = getPackageManager();
		try {
			//获取功能清单文件
			PackageInfo info=pm.getPackageInfo(getPackageName(), 0);
			return info.versionName;
		} catch (NameNotFoundException e) {
			e.printStackTrace();
			return "";
		}
	}

 2.对相应事件进行响应

private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
			case SHOW_UPDATE_DIALOG:   //显示升级对话框
				showUpdateDialog();
				break;
            case ENTER_HOME:           //进入主界面
				enterHome();
				break;
            case JSON_ERROR:           //JSON解析出错
	            Toast.makeText(getApplicationContext(), "JSON出错", 0).show();
	            break;
            case NETWORK_ERROR:        //网络异常
            	Toast.makeText(getApplicationContext(), "网络异常", 0).show();
	            break;
            case URL_ERROR:            //URL出错
            	Toast.makeText(getApplicationContext(), "URL出错", 0).show();
	            break;
			default:
				break;
			}
		}
	};

 3.新版本的下载与安装

      /*
	 * 弹出升级对话框
	 */
	protected void showUpdateDialog() {
		AlertDialog.Builder builder=new Builder(this);
	//	builder.setCancelable(false); //强制升级
		builder.setOnCancelListener(new OnCancelListener() {
			
			public void onCancel(DialogInterface dialog) {
				//进入主页
				enterHome();
				dialog.dismiss();
			}
		});
		builder.setTitle("提示升级");
		builder.setMessage(discription);
		builder.setPositiveButton("立即升级", new OnClickListener() {
			
			public void onClick(DialogInterface dialog, int which) {
				// 下载apk,并安装替换
				if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){
					//sdcard存在
					//final,第三方架包
					FinalHttp finalhttp=new FinalHttp();
					finalhttp.download(apkurl, Environment.getExternalStorageDirectory().getAbsolutePath()+"/mobilesafe2.0", 
							new AjaxCallBack<File>() {

						@Override
						public void onFailure(Throwable t, int errorNo,
								String strMsg) {
							// 下载失败
							t.printStackTrace();
							Toast.makeText(getApplicationContext(), "下载失败", 1).show();
							super.onFailure(t, errorNo, strMsg);
						}

						@Override
						public void onLoading(long count, long current) {
							tv_update_info.setVisibility(View.VISIBLE);  //显示进度文本
							//当前下载百分比
							int progress=(int) (current*100/count);
							tv_update_info.setText("下载进度"+progress+"%");
							super.onLoading(count, current);
						}

						@Override
						public void onSuccess(File t) {
							super.onSuccess(t);
							installAPK(t);
						}
						//安装下载好的Apk
						private void installAPK(File t) {
							Intent intent = new Intent();
							  intent.setAction("android.intent.action.VIEW");
							  intent.addCategory("android.intent.category.DEFAULT");
							  intent.setDataAndType(Uri.fromFile(t), "application/vnd.android.package-archive");
							  startActivity(intent);
						}
					
					});
				}else {
					Toast.makeText(getApplicationContext(), "sdcard不存在,请安装再试",0).show();
					return;
				}
			}
		});
		builder.setNegativeButton("下次再说", new OnClickListener() {
			
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
				enterHome();   //进入主页
			}
		});
		builder.show();
	}

 服务器路径

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="serverurl">http://192.168.1.112:8080/updateinfo.html</string>
</resources>

 

分享到:
评论

相关推荐

    android 应用更新功能 检测更新 自动下载安装 demo updatedemo

    在Android应用开发中,实现应用自动检测更新、下载并安装的功能是提高用户体验和保持软件最新状态的关键。"updatedemo"通常是指一个示例项目,它展示了如何构建这样的更新机制。以下将详细介绍这个过程中的关键知识...

    Android-Android应用自动静默更新安装库.

    "Android-Android应用自动静默安装库"是一个专门为Android应用设计的库,其目的是让应用的更新过程更加无缝、高效且对用户无打扰。这个库允许应用程序在后台静默下载更新文件,并在合适的时机进行自动安装,无需用户...

    获得Android系统中所有已安装的应用并联网检测自动升级更新

    7. **安装更新**: 下载完成后,可以通过`Intent`启动安装流程。使用`ACTION_VIEW`意图并指定`package`和`data`属性,指向下载好的APK文件。用户确认后,系统会自动开始安装过程。 8. **考虑安全因素**: 在联网...

    android 检查应用更新

    综上所述,实现Android应用更新检查涉及到网络通信、数据解析、用户交互等多个环节,需要综合运用多种Android开发技术和最佳实践。开发者应确保整个过程的效率、安全性和用户体验,同时考虑到各种可能的场景和错误...

    android应用下载安装apk升级版本实现demo适配Android10

    本示例“android应用下载安装apk升级版本实现demo适配Android10”聚焦于如何在Android 10(API级别29)及更高版本中实现这一过程。以下是关于这一主题的详细知识: 1. **安全下载APK**:在Android 10中,为了保障...

    Android应用自动更新代码实现

    本文将详细探讨如何在Android应用程序中实现自动检查并下载新版本的代码逻辑,以达到无缝更新的效果。 首先,我们需要一个服务(Service)来执行后台的更新检查。这个服务会在合适的时机(例如应用启动时或网络连接...

    android应用的自动更新

    5. **安装更新**:下载完成后,需要在合适的时机(如用户点击"立即安装"按钮或在后台静默安装)调用`Intent`来启动安装流程。由于安全原因,Android系统限制了非系统应用在前台安装其他应用,所以通常需要引导用户...

    Android 应用软件自动更新源码.rar

    - 如果检测到新版本,系统会提示用户下载并安装更新。 2. **实现方式**: - 使用Google Play服务的`VersionCheck` API:这是官方推荐的方法,适用于发布在Google Play Store的应用。它能自动检测、下载和安装更新...

    Android-android应用应用内更新解决方案

    在Android应用开发中,应用内更新是至关重要的一个环节,它能够让用户无缝地获取到应用的最新功能和修复,提高用户体验。"Android-android应用应用内更新解决方案"主要探讨的就是如何在Android应用程序中实现平滑、...

    Android apk更新安装代码

    总结来说,实现Android应用的自动更新安装功能涉及到多个步骤,包括检查更新、下载APK、申请权限、安装APK以及处理安装结果。开发者需要根据目标设备的最低API级别以及特定需求选择合适的实现策略。参考链接提供的...

    Android应用隐私条例与敏感行为一致性检测.pdf

    Android 应用隐私条例与敏感行为一致性检测 Android 应用隐私条例与敏感行为一致性检测是移动应用安全检测的重要方面。随着移动应用的普及,移动应用对用户隐私的保护变得越来越重要。Google 建议开发者在上传应用...

    android 静默安装和普通安装版本更新

    XUpdate可能提供了方便的API和配置选项,帮助开发者轻松实现应用的自动检查更新、下载更新包及执行静默安装。开发者只需要集成XUpdate库,按照文档配置更新策略,就能实现高效且灵活的应用版本更新机制。 在实际...

    android 版本更新 APK 下载 安装

    4. **传输与安装**:将APK文件通过USB数据线拷贝到Android设备,或者直接在手机浏览器中下载后,找到该文件,点击进行安装。如果拷贝到设备,可能需要在文件管理器中找到APK文件。 5. **安装过程**:系统会提示安装...

    Android 监听应用的安装和卸载

    总的来说,通过创建BroadcastReceiver并监听ACTION_PACKAGE_ADDED和ACTION_PACKAGE_REMOVED这两个系统广播,我们可以实现在Android应用中监听其他应用的安装和卸载事件。这种机制对于系统监控、数据分析或自动化测试...

    Android应用源码之应用程序自动更新源码.zip

    在Android应用开发中,应用程序自动更新是至关重要的功能,它能确保用户始终使用的是最新、最安全的版本。本资源提供了Android应用源码,详细展示了如何实现这一功能。以下是基于提供的"应用程序自动检查更新源码"的...

    android判断手机是否安装地图应用实现跳转到该地图应用

    上述的packagename是你要检测的应用的包名,怎么查看包名请自行百度哈! 判断好之后,我们可以定义,当有地图应用的时候,就跳转到地图应用,当无地图应用的时候,就跳转到网页: 跳转到高德地图: 参数: act=...

    Android版本检测安装

    在Android开发中,版本检测与安装是至关重要的环节,它涉及到用户体验、软件兼容性和安全性等多个方面。本文将深入探讨Android版本检测安装的相关知识点,并提供实际操作的指导。 首先,了解Android版本检测的基本...

    Android判断应用是否安装操作

    首先,我们需要获取目标应用的包名(package name),这是每个Android应用的唯一标识符。包名通常在应用的AndroidManifest.xml文件中定义。例如,如果我们想要检测的是名为"com.example.myapp"的应用,那么包名就是...

    Android应用源码版本检测自动更新.zip

    在Android应用开发中,源码版本检测和自动更新机制是至关重要的组成部分,它能帮助开发者及时推送新功能、修复安全漏洞,并提升用户体验。这个压缩包"Android应用源码版本检测自动更新.zip"很可能是提供了一个完整的...

    Android应用更新示例

    4. **安装更新**:下载完成后,需在用户确认或后台自动触发`Intent`来安装新APK。注意,非Google Play Store的安装需要用户手动开启“未知来源”权限。 5. **处理失败情况**:包括网络错误、下载失败、安装失败等,...

Global site tag (gtag.js) - Google Analytics