android软件自动更新的实现步骤

17 篇文章 1 订阅
订阅专栏
13 篇文章 0 订阅
订阅专栏
6 篇文章 0 订阅
订阅专栏



本篇文章是直接下载最新的APK安装的方法,并不是增量下载该APk。

转载请注明出处:http://blog.csdn.net/harryweasley/article/details/44955719,谢谢

想要实现一个android应用,自动更新下载APK软件的方法,我采取的是以下几步方法:

1.每次进入主界面时,获取服务器的数据,看是否是最新版本,是,则无操作,否,则进行以下步骤;

2.弹出是否更新软件的对话框,点击下载后

3.弹出下载的进度条的对话框,开始下载,可以上随时点击按钮,停止下载

4.下载完成后,调用系统安装软件的服务,安装软件

效果图:







实现过程:



新建一个UpdateManager方法,具体内容我已经有详细的注释

package lgx.acc.updatedemo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;

public class UpdateManager {
	// 应用程序Context
	private Context mContext;
	// 是否是最新的应用,默认为false
	private boolean isNew = false;
	private boolean intercept = false;
	// 下载安装包的网络路径
	private String apkUrl = "http://shouji.360tpcdn.com/360sj/tpi/20130201/"
			+ "com.flikie.wallpapers.gallery_4.apk";
	// 保存APK的文件夹
	private static final String savePath = "/sdcard/updatedemo/";
	private static final String saveFileName = savePath
			+ "UpdateDemoRelease.apk";
	// 下载线程
	private Thread downLoadThread;
	private int progress;// 当前进度
	TextView text;
	// 进度条与通知UI刷新的handler和msg常量
	private ProgressBar mProgress;
	private static final int DOWN_UPDATE = 1;
	private static final int DOWN_OVER = 2;

	public UpdateManager(Context context) {
		mContext = context;
	}

	/**
	 * 检查是否更新的内容
	 */
	public void checkUpdateInfo() {
		//这里的isNew本来是要从服务器获取的,我在这里先假设他需要更新
		if (isNew) {
			return;
		} else {
			showUpdateDialog();
		}
	}

	/**
	 * 显示更新程序对话框,供主程序调用
	 */
	private void showUpdateDialog() {
		AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
		builder.setTitle("软件版本更新");
		builder.setMessage("有最新的软件包,请下载!");
		builder.setPositiveButton("下载", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				showDownloadDialog();
			}

		});
		builder.setNegativeButton("以后再说",
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						dialog.dismiss();
					}
				});

		builder.create().show();
	}

	/**
	 * 显示下载进度的对话框
	 */
	private void showDownloadDialog() {
		AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
		builder.setTitle("软件版本更新");
		LayoutInflater inflater = LayoutInflater.from(mContext);
		View v = inflater.inflate(R.layout.progress, null);
		mProgress = (ProgressBar) v.findViewById(R.id.progress);

		builder.setView(v);
		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				intercept = true;
			}
		});
		builder.show();
		downloadApk();
	}

	/**
	 * 从服务器下载APK安装包
	 */
	private void downloadApk() {
		downLoadThread = new Thread(mdownApkRunnable);
		downLoadThread.start();
	}

	private Runnable mdownApkRunnable = new Runnable() {

		@Override
		public void run() {
			URL url;
			try {
				url = new URL(apkUrl);
				HttpURLConnection conn = (HttpURLConnection) url
						.openConnection();
				conn.connect();
				int length = conn.getContentLength();
				InputStream ins = conn.getInputStream();
				File file = new File(savePath);
				if (!file.exists()) {
					file.mkdir();
				}
				File apkFile = new File(saveFileName);
				FileOutputStream fos = new FileOutputStream(apkFile);
				int count = 0;
				byte[] buf = new byte[1024];
				while (!intercept) {
					int numread = ins.read(buf);
					count += numread;
					progress = (int) (((float) count / length) * 100);

					// 下载进度
					mHandler.sendEmptyMessage(DOWN_UPDATE);
					if (numread <= 0) {
						// 下载完成通知安装
						mHandler.sendEmptyMessage(DOWN_OVER);
						break;
					}
					fos.write(buf, 0, numread);
				}
				fos.close();
				ins.close();

			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	};

	/**
	 * 安装APK内容
	 */
	private void installAPK() {
		File apkFile = new File(saveFileName);
		if (!apkFile.exists()) {
			return;
		}
		Intent intent = new Intent(Intent.ACTION_VIEW);
		intent.setDataAndType(Uri.parse("file://" + apkFile.toString()),
				"application/vnd.android.package-archive");
		mContext.startActivity(intent);
	};

	private Handler mHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {

			case DOWN_UPDATE:
				mProgress.setProgress(progress);
				break;

			case DOWN_OVER:
				installAPK();
				break;

			default:
				break;
			}
		}

	};
}


还有progressBar.xml的具体代码


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/progress"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

  
</LinearLayout>



之后在MainActivity的onCreate方法中,调用一下代码即可

UpdateManager manager=new UpdateManager(MainActivity.this);
		manager.checkUpdateInfo();



一定要记得在manifest里面加权限哈,

<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>



最后效果就出来了。


有什么建议请多多指教~~~~


一个轻量级、高可用性的 Android 版本更新框架,头条android面试题
k186____5189的博客
12-24 970
自定义提示弹窗主题 使用系统弹窗提示 Demo 更新后台服务 由于 github 最近访问比较慢,如果需要更好地体验 XUpdate,你可以点击自己搭建一个简易的版本更新服务。 Demo 下载 2、快速集成指南 目前支持主流开发工具 AndroidStudio 的使用,直接配置 build.gradle,增加依赖即可. 2.1、Android Studio 导入方法,添加 Gradle 依赖 1.先在项目根目录的 build.gradle 的 repositories 添加: allp.
Android APK 程序实现自动更新,java服务命令处理无弹窗,终极解决方案
小杨互联网
03-19 5555
安卓更新方式,网上五花八门,但是真正实现apk自动更新无痕迹的方式,少之又少,毕竟不要钱的方式,稳定的方式才能让开发者在困难中脱颖而出。 安卓程序如何做到自动更新?安卓程序如何实现无弹框更新? 1,安卓apk自动更新方式? a,第三方平台更新apk,灰度发布,用友 b,系统更新方式有弹窗contenx,通过窗体上下文方式实现更新。 c,通过安卓程序系统服务实现命令更新,自启等。 d,通过安卓反编译修改安卓源码包实现自动更新
Android - 软件自动更新实现
03-23 128
那如何实现软件自动更新,具体过程: 效果图: 具体步骤: 1. 在服务器上部署更新所用的xml文件:version.xml <update> <version>2</version> <name>baiduxinwen.apk</name> <url&gt...
Android自动升级框架
DylanAndroid
07-21 5383
先看效果 使用 package com.ydl.versionupdate; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.Menu; import com.ydl.appupdate.NewVersion; pub
Android软件更新包的自动更新
chw12341的博客
03-24 866
作为一个Android开发者,几乎开发的每个软件都需要有自动检测更新功能,,写的多了自然想要封装、记录一下,下次再使用的时候就可以用最拿手的Ctrl-C、Ctrl-V方式搞定了。废话不多说,下面直接上代码。在这里直接封装了一个UpDateAppManager类,对外提供了两个主要的方法,no_button()和yes_button()方法,分别实现自动检测更新包和手动检测更新包。public cl...
android实现软件自动更新步骤
08-27
Android 实现软件自动更新步骤 Android 实现软件自动更新是指在 Android 应用程序中实现自动更新功能,确保用户可以及时获取最新版本的应用程序。下面是实现 Android 软件自动更新步骤: 1. 检查更新信息 在...
Android 软件自动更新功能实现的方法
09-05
以上就是实现Android软件自动更新功能的基本步骤和关键点。这个功能不仅提高了用户体验,也确保了应用始终处于最新状态,减少了因旧版本导致的问题。在实际开发中,还需要考虑到错误处理、用户反馈以及网络连接变化...
18.[开源][安卓][自动更新框架]HockeyKit-develop
02-23
18.[开源][安卓][自动更新框架]HockeyKit-develop Hockey是一个iOS Ad-Hoc自动更新框架。苹果App Store中的所有App都可以使用它,它能够显著地提高Beta测试的整个过程,分为两部分:服务器和客户端框架。服务器组件需要所有脚本,但在没有客 户端库的情况下,也可以单独工作。它提供一个Web接口,Beta测试者可以使用它来安装最新的AdHoc配置文件,也可以直接在设备上通过Safari 安装最新的Beta版本。 只需在服务器上安装一次服务端,就可以处理包标识符不同的多个应用程序(有开发者强烈建议对Debug、AdHoc Beta和AppStore发布版使用不同的包标识符)。 默认当App启动或唤醒时,客户端会从服务器检测更新,用户可以在设置对话框中进行修改:一天一次或手动检查更新。 除了支持iOS,HokeyKit也支持Android平台,不过Android版还处在Alpha阶段,支持OTA及应用更新。 为HockeyKit用户提供服务器托管服务。
android 动态加载之自动升级(插件式开发)
05-09
这一个动态加载的demo,如果不知道原理的,可去http://blog.csdn.net/u013895206 博客了解下原理。
自动更新组件
10-31
应用检查更新组件、包含普通更新和强制更新自动安装适配android 7.0、8.0
Android-Android一行代码让你实现APP自动更新功能
08-13
一行代码让你实现APP自动更新功能
Android实现APP自动更新功能
08-27
主要为大家详细介绍了Android实现APP自动更新功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android 实现app自动升级
08-31
使用android 自带的DownloadManager实现文件下载,兼容性强,代码简单
Android实现自动更新
crrose的博客
11-08 2039
Android实现自动更新 最近需要实现一个自动更新功能,中间遇到了点坑,需要写篇博客记一下,同时给自己造个轮子. 首先把坑贴出来 调用URI隐式跳转apk安装时需要以下权限&amp;amp;amp;lt;!--自动更新URI跳转安装时需要--&amp;amp;amp;gt; &amp;amp;amp;lt;uses-permission android:name=&amp;amp;quot;android.permission.REQUEST_INSTALL_PACKA
快速自动更新Android Studio版本
热门推荐
七号公园的博客
03-16 4万+
快速自动更新Android Studio版本
AndroidStudio 实现APP版本自动更新(内部更新,不涉及第三方市场)
最新发布
weixin_44538423的博客
03-28 4063
【代码】AndroidStudio 实现APP版本自动更新(内部更新,不涉及第三方市场)
android apk 自动更新,Android自动更新APK
weixin_29783407的博客
05-25 1049
8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?通过Service的方式(推荐使用JobService),在后台获取服务器的APK信息,然后下载到本地,通过调用系统安装程序,来安装最新的APK。其中,调用系统安装程序的主要代码如下:123456789101112131415File apkFil = new File(mContext.getExternalCache...
写文章

热门文章

  • bitmap的六种压缩方式,Android图片压缩 68319
  • switch-case语句里面有return了 ,break还起作用吗?该如何解决 31625
  • android edittext监听输入完成,输入完成后,获取到值 27913
  • android ratingbar 星星间距问题,自定义ratingBar 24927
  • PagerSlidingTabStrip介绍及使用,让ViewPager更绚丽 22548

分类专栏

  • Java 18篇
  • Android 17篇
  • gps定位 4篇
  • listView_gridView 21篇
  • Activity 10篇
  • 固体按键 5篇
  • editText 7篇
  • textview 9篇
  • 那些单位 4篇
  • 面试笔试题 2篇
  • fragment 7篇
  • 时间日期 5篇
  • 动画效果 12篇
  • 颜色相关 4篇
  • 毕业设计 3篇
  • BroadcastReceiver 2篇
  • 系统权限 6篇
  • dos命令 2篇
  • exception 11篇
  • sha1值 3篇
  • 开源项目 3篇
  • 网络相关 13篇
  • Linux 10篇
  • eclipse 10篇
  • 弹出框 12篇
  • webService 3篇
  • 线程和进程 8篇
  • 文件操作 6篇
  • 数据库 7篇
  • 内存 4篇
  • notification 3篇
  • 相机图片 7篇
  • 加密方式 4篇
  • String 4篇
  • 心跳响应 2篇
  • canvas画图 7篇
  • 输入法 4篇
  • service 3篇
  • 自定义控件 4篇
  • 电视应用 4篇

最新评论

  • 利用selector方法使listview,gridview的item背景变色

    Nancy希酱zyr: @drawable/poupwindow" 这个里面是什么呀 求分享

  • 解决URLConnection空指针异常的方法

    肝就完了0807: 你这个是正确的代码还是出错的代码

  • Android获取有线网ip地址

    debug_cat: 有用,能拿到盒子ip

  • Glide centerCrop fitCenter和ImageView的scaleType的关系,互相影响的探讨

    starpine: 找到是啥问题吗

  • Glide centerCrop fitCenter和ImageView的scaleType的关系,互相影响的探讨

    锥度vs: 为啥我glide设置fitcenter(),显示出来的图片还是centerCrop的样子,也就是图片是不全的,旁边被截掉了

最新文章

  • 通过源码来理解RxJava是切换到主线程的?
  • Android模仿快手视频详情页退出动画
  • Android模仿微信浮窗功能的效果实现
2020年1篇
2019年1篇
2018年1篇
2017年5篇
2016年13篇
2015年146篇
2014年75篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家黑龙江高质量玻璃钢雕塑重庆湛江玻璃钢动物雕塑秋季商场美陈采购安庆人物玻璃钢雕塑制作厂家玻璃钢雕塑线条合同湖南抽象玻璃钢雕塑市场广州白云商场美陈玻璃钢雕塑电镀加工厂乌当区玻璃钢雕塑设计公司邓州玻璃钢雕塑厂家商场美陈课件红色大玻璃钢花盆莱西玻璃钢花盆花器四川玻璃钢马雕塑工厂门头玻璃钢雕塑出售靠谱的玻璃钢人像雕塑定西玻璃钢花盆湛江美陈玻璃钢卡通雕塑新郑铜玻璃钢景观雕塑新品玻璃钢创意雕塑玻璃钢卡通熊猫雕塑匠心打造河南仿古玻璃钢卡通雕塑加工铜玻璃钢景观雕塑生产厂家玻璃钢艺术雕塑性价比银川市金凤区汇甲玻璃钢雕塑厂德州花朵玻璃钢景观雕塑厂家中山玻璃钢雕塑批发定制组合式玻璃钢花盆采购大型玻璃钢雕塑制作厂德庆玻璃钢造型雕塑公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化