原文地址:android 自动更新apk版本
截图如下:
代码实现如下:
package com.update.apk; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONObject; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; 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.util.Log; public class MainActivity extends Activity { /** Called when the activity is first created. */ String newVerName = "";//新版本名称 int newVerCode = -1;//新版本号 ProgressDialog pd = null; String UPDATE_SERVERAPK = "ApkUpdateAndroid.apk"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if(getServerVer()){ int verCode = this.getVerCode(this); if(newVerCode>verCode){ doNewVersionUpdate();//更新版本 }else{ notNewVersionUpdate();//提示已是最新版本 } } } /** * 获得版本号 */ public int getVerCode(Context context){ int verCode = -1; try { verCode = context.getPackageManager().getPackageInfo("com.update.apk", 0).versionCode; } catch (NameNotFoundException e) { // TODO Auto-generated catch block Log.e("版本号获取异常", e.getMessage()); } return verCode; } /** * 获得版本名称 */ public String getVerName(Context context){ String verName = ""; try { verName = context.getPackageManager().getPackageInfo("com.update.apk", 0).versionName; } catch (NameNotFoundException e) { Log.e("版本名称获取异常", e.getMessage()); } return verName; } /** * 从服务器端获得版本号与版本名称 * @return */ public boolean getServerVer(){ try { URL url = new URL("http://10.0.2.2:8080/ApkUpdateService/ver"); HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); httpConnection.setDoInput(true); httpConnection.setDoOutput(true); httpConnection.setRequestMethod("GET"); httpConnection.connect(); InputStreamReader reader = new InputStreamReader(httpConnection.getInputStream()); BufferedReader bReader = new BufferedReader(reader); String json = bReader.readLine(); JSONArray array = new JSONArray(json); JSONObject jsonObj = array.getJSONObject(0); newVerCode = Integer.parseInt(jsonObj.getString("verCode")); newVerName = jsonObj.getString("verName"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } return true; } /** * 不更新版本 */ public void notNewVersionUpdate(){ int verCode = this.getVerCode(this); String verName = this.getVerName(this); StringBuffer sb = new StringBuffer(); sb.append("当前版本:"); sb.append(verName); sb.append(" Code:"); sb.append(verCode); sb.append("\n已是最新版本,无需更新"); Dialog dialog = new AlertDialog.Builder(this) .setTitle("软件更新") .setMessage(sb.toString()) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub finish(); } }).create(); dialog.show(); } /** * 更新版本 */ public void doNewVersionUpdate(){ int verCode = this.getVerCode(this); String verName = this.getVerName(this); StringBuffer sb = new StringBuffer(); sb.append("当前版本:"); sb.append(verName); sb.append(" Code:"); sb.append(verCode); sb.append(",发现版本:"); sb.append(newVerName); sb.append(" Code:"); sb.append(verCode); sb.append(",是否更新"); Dialog dialog = new AlertDialog.Builder(this) .setTitle("软件更新") .setMessage(sb.toString()) .setPositiveButton("更新", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub pd = new ProgressDialog(MainActivity.this); pd.setTitle("正在下载"); pd.setMessage("请稍后。。。"); pd.setProgressStyle(ProgressDialog.STYLE_SPINNER); downFile("http://10.0.2.2:8080/ApkUpdateService/ApkUpdateAndroid.apk"); } }) .setNegativeButton("暂不更新", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub finish(); } }).create(); //显示更新框 dialog.show(); } /** * 下载apk */ public void downFile(final String url){ pd.show(); new Thread(){ public void run(){ HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(url); HttpResponse response; try { response = client.execute(get); HttpEntity entity = response.getEntity(); long length = entity.getContentLength(); InputStream is = entity.getContent(); FileOutputStream fileOutputStream = null; if(is != null){ File file = new File(Environment.getExternalStorageDirectory(),UPDATE_SERVERAPK); fileOutputStream = new FileOutputStream(file); byte[] b = new byte[1024]; int charb = -1; int count = 0; while((charb = is.read(b))!=-1){ fileOutputStream.write(b, 0, charb); count += charb; } } fileOutputStream.flush(); if(fileOutputStream!=null){ fileOutputStream.close(); } down(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); pd.cancel(); update(); } }; /** * 下载完成,通过handler将下载对话框取消 */ public void down(){ new Thread(){ public void run(){ Message message = handler.obtainMessage(); handler.sendMessage(message); } }.start(); } /** * 安装应用 */ public void update(){ Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory(),UPDATE_SERVERAPK)) , "application/vnd.android.package-archive"); startActivity(intent); } }
<!--end: topics 文章、评论容器-->
相关推荐
在Android应用开发中,适配不同的系统版本是一项重要的任务,特别是在自动更新APK的过程中。本文将深入探讨如何解决Android10以下及以上的系统版本中,下载更新的APK自动安装失败的问题,为开发者提供实用的解决方案...
在Android平台上,自动安装APK是一项常见的操作,尤其对于开发者来说,这有助于快速测试和部署应用。本示例,"Android 自动安装apk",提供了一个DEMO,它允许用户无需手动操作即可安装APK文件。这个过程涉及到...
这个"Android自动更新的demo"就是一个展示如何在Android应用中实现自动检查和下载更新的示例。以下是对这个主题的详细解释: 一、自动更新机制 1. 检测更新:首先,应用需要在后台定期或者在启动时检测是否有新...
本教程将详细解释如何进行Android版本更新,包括下载新版本的APK文件以及如何在设备上安装。 一、APK 文件及其作用 APK 文件是一个包含所有必要组件的压缩包,包括代码、资源、库和应用程序的清单文件。当用户在...
unity 内部更新Apk 自动安装 支持安卓8.0 以上 demo.apk 测试包
本示例“android应用下载安装apk升级版本实现demo适配Android10”聚焦于如何在Android 10(API级别29)及更高版本中实现这一过程。以下是关于这一主题的详细知识: 1. **安全下载APK**:在Android 10中,为了保障...
在Android平台上,实现从网络下载APK文件并自动执行安装是一个常见的需求,尤其在更新应用或者分发非市场应用时。这个过程涉及到多个步骤,包括网络请求、文件下载、权限处理以及安全检查。下面我们将详细讲解如何...
总结,实现Android APK的自动更新需要考虑多个方面,包括权限管理、系统版本适配、后台任务执行等。通过合理的设计和编码,可以为用户提供便捷、安全的自动更新体验。而“android-APK自动更新.rar”资源正好提供了...
在Android平台上,更新、下载、安装以及打开APK文件是应用程序生命周期中的常见操作。下面将详细阐述这些过程及其相关的知识点。 一、Android APK文件 APK(Android Package)是Android系统中应用程序的安装包,...
在Android应用开发中,自动更新功能是至关重要的,它能够帮助开发者及时修复程序中的错误,增加新特性,并确保用户始终使用的是最新版本的应用。"Android 应用软件自动更新源码"是一个示例项目,旨在教授如何在...
通过以上步骤,你可以构建一个完整的Android应用自动更新系统,能够无缝地检测、下载并安装新版本的APK文件。"DownLoadDemo"源代码实例将详细展示这些实现细节,为开发者提供了一个实用的参考模板。在实际项目中,...
虽然在这个特定场景中,AppCompat库可能并非直接用于apk自动更新,但它是Unity Android项目中常见的依赖,因为它能确保应用在不同Android版本上的视觉一致性。 实现Unity中的Android APK自动更新,通常涉及以下步骤...
本教程将详细讲解如何在Android 7.0及更高版本上实现Apk的自动下载与安装,主要基于提供的"InstallAPKDemo"示例项目。 首先,理解Android 7.0的权限管理变化是至关重要的。在之前的版本中,用户在安装应用时会一次...
在Android平台上,实现应用的版本自动更新是一项重要的功能,它能确保用户始终使用到最新、最安全的软件版本。这个过程通常涉及到服务器端的更新管理、客户端的检测和下载以及安装流程。以下将详细讲解这一过程中的...
在Android应用开发中,版本更新是维持应用活力和安全性的关键环节。本文将详细探讨如何在Android系统中实现版本检测、下载以及安装的过程,确保用户能够及时获取到最新的应用版本。 首先,我们要实现版本检测。这...
综上所述,创建一个Android apk自动更新版本程序涉及到多个步骤,包括获取Google Play的更新信息、处理更新流程、以及在用户界面中适当地提示和执行更新。通过这些技术,你可以确保用户始终使用应用的最新版本,从而...
本篇文章将深入探讨如何构建一个Android自动更新程序,包括其背后的原理、实现步骤以及可能遇到的问题。 首先,我们要理解自动更新的核心原理。Android应用的自动更新通常基于Google Play Store或自建的应用市场。...
本篇文章将详细介绍如何在Android应用中实现APK的自动更新安装功能。 首先,我们需要理解Android系统如何处理APK的安装过程。当用户下载一个APK文件后,系统默认的行为是通过点击文件或使用“安装未知应用”权限来...
在开发 Delphi Android 应用程序时,自动更新功能是一个重要的组成部分,它允许用户方便快捷地获取应用的最新版本,而无需手动下载安装。本文将详细介绍如何使用 RAD Studio 10.3.3 实现这一功能,并在 Android 10 ...