提升升级 强制更新 Download
Activity和广播
/**下载APK细节1、点击升级后对话框不消失,再次点击时不能重复下载2、下载过程中退出APP,下次进入应用后要重新下载(因为可能不完整)3、下载过程中退出APP(或下载完成后退出),如果APK已经下载完毕,则下次进入应用后不再下载4、如果下载的APK被清除了,要重新下载5、断网后重新连接或切换网络后不受影响*/public class MainActivity extends Activity {private TextView textView;private DownloadCompleteReceiver receiver = null;private String url = "http://113.107.216.43/imtt.dd.qq.com/16891/BD5BA98958C0FEC9D88FB65BF5534A3B.apk?mkey=581c007d0e1baac8&f=8a5d&c=0&fsname=com.bcb_2.0.2_52.apk&csr=4d5s&p=.apk";private String fileName;private AlertDialog dialog;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);textView = new TextView(this);setContentView(textView);fileName = "福利金融-" + Utiles.getVersionCode(this) + ".apk";textView.setText("文件名:" + fileName //+ "\n文件路径:" + Utiles.getApkFile(fileName).getPath() //+ "\n是否已下载过此版本的安装包:" + Utiles.getIsDownloaded(this, fileName)//+ "\n是否已下载时退出了:" + Utiles.getIsFinishedWhenDownloading(this));showVersionDialog();}private void showVersionDialog() {AlertDialog.Builder ibuilder = new AlertDialog.Builder(this);ibuilder.setTitle("版本更新啦!");ibuilder.setMessage("优化用户界面,界面更好看\n修复所有已经的bug");ibuilder.setNegativeButton("退出应用", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();dialog = null;finish();}});ibuilder.setPositiveButton("立即更新", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {File file = Utiles.getApkFile(fileName);if (Utiles.getIsDownloaded(MainActivity.this, fileName)) {//已下载完毕if (file == null || !file.exists()) {Utiles.clearSP(MainActivity.this);//清空保存的两个数据registerReceiver();//被删了,重新下载} else Utiles.installApk(MainActivity.this, file);//否则,安装} else if (Utiles.getIsFinishedWhenDownloading(MainActivity.this)) {//上次在下载过程中退出了,下次进入应用时重新下载registerReceiver();//重新下载} else if (file != null && file.exists()) {//正在下载Toast.makeText(MainActivity.this, "正在下载,请稍后", Toast.LENGTH_SHORT).show();} else {//没下载过registerReceiver();}}});dialog = ibuilder.create();dialog.setCanceledOnTouchOutside(false);dialog.setCancelable(false);dialog.show();}private void registerReceiver() {receiver = new DownloadCompleteReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE);//下载完成的动作registerReceiver(receiver, intentFilter);Utiles.downLoadFile(MainActivity.this, url, fileName);//开始下载}class DownloadCompleteReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {Toast.makeText(MainActivity.this, "下载完毕", Toast.LENGTH_SHORT).show();textView.append("下载完毕");Utiles.saveIsDownloaded(context, fileName);Utiles.installApk(context, Utiles.getApkFile(fileName));if (receiver != null) {unregisterReceiver(receiver);receiver = null;}}}}@Overrideprotected void onDestroy() {super.onDestroy();if (receiver != null) {//如果receiver不为空,说明正在下载APK包,即使应用退出了,也会继续下载unregisterReceiver(receiver);Utiles.saveIsFinishedWhenDownloading(this);//如果在下载过程中退出了,下次进入应用时重新下载}}}
工具
public class Utiles {public static final String SP_NAME = "version";public static final String FILE_PATH = "/fljr/apk";/**返回下载的APK文件*/public static File getApkFile(String fileName) {String filePath = Environment.getExternalStorageDirectory().getPath() + FILE_PATH + File.separator + fileName;return new File(filePath);}/**安装指定的APK包*/public static void installApk(Context context, File apkFile) {Intent mIntent = new Intent(Intent.ACTION_VIEW);mIntent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(mIntent);}/**获取VersionCode*/public static int getVersionCode(Context context) {try {PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);return packageInfo.versionCode;} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();return 0;}}/**清空SP的数据*/public static void clearSP(Context context) {SharedPreferences.Editor editor = context.getSharedPreferences(SP_NAME, 0).edit();editor.clear();editor.commit();}//******************************************************************************************/**记录是否在下载过程中退出了,如果在下载过程中退出了,下次进入应用时重新下载*/public static void saveIsFinishedWhenDownloading(Context context) {SharedPreferences.Editor editor = context.getSharedPreferences(SP_NAME, 0).edit();editor.putBoolean("finish", true);editor.commit();}/**是否在下载过程中退出了*/public static boolean getIsFinishedWhenDownloading(Context context) {return context.getSharedPreferences(SP_NAME, 0).getBoolean("finish", false);}//******************************************************************************************/**记录是否已下载过指定版本的APK包*/public static void saveIsDownloaded(Context context, String fileName) {SharedPreferences.Editor editor = context.getSharedPreferences(SP_NAME, 0).edit();editor.putBoolean(fileName, true);editor.commit();}/**查看是否已下载过指定版本的APK包*/public static boolean getIsDownloaded(Context context, String fileName) {return context.getSharedPreferences(SP_NAME, 0).getBoolean(fileName, false);}/**下载文件*/public static void downLoadFile(Context mContext, String url, String fileName) {DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url))//下载路径.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)//显示方式。默认,下载过程中显示,下载完成后自动消失.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)//网络设置.setDestinationInExternalPublicDir(FILE_PATH, fileName);//文件下载路径((DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request);}}
提升升级 强制更新 Download的更多相关文章
- iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏
1.使用CAReplicatorLayer制作等待动画 CALayer+CABasicAnimation可以制作很多简单的动画效果,之前的博客中介绍的“两个动画”,一个是利用一张渐变色图片+CABas ...
- 微信小程序热更新,小程序提示版本更新,版本迭代,强制更新,微信小程序版本迭代
相信很多人在做小程序的时候都会有迭代每当版本迭代的时候之前老版本的一些方法或者显示就不够用了这就需要用到小程序的热更新.或者说是提示升级小程序版本 editionUpdate:function(){ ...
- Atitit.提升 升级类库框架后的api代码兼容性设计指南
Atitit.提升 升级类库框架后的api代码兼容性设计指南 1. 增加api直接增加,版本号在注释上面增加1 2. 废弃api,使用主见@dep1 3. 修改api,1 4. 修改依赖import, ...
- WPF强制更新
,更新的时候选择最小版本号,就是强制更新
- maven缺少依赖包,强制更新命令
mvn clean install -e -U -e详细异常,-U强制更新
- git 本地代码冲突解决,强制更新
git reset soft,hard,mixed之区别深解 git reset --hard 强制更新覆盖本地 GIT reset命令,似乎让人很迷惑,以至于误解,误用.但是事实上不应该如此难 ...
- iOS实现应用更新及强制更新
调用更新接口返回字段: result = { descr = ""; isupdate = 1;//是否更新 ...
- Maven项目强制更新,解决Failed to read artifact descriptor for xxx.jar问题
导入的maven项目pom.xml现红叉 分析原因:在maven本地仓库中找不到相应的jar包. 解决方案:让maven强制更新依赖. 项目右击菜单,Maven -> Update Projec ...
- Git强制更新本地库和冲突解决
1.You have not concluded your merge. (MERGE_HEAD exists) 本地有修改和提交,如何强制用远程的库更新.出现这种情况一般是git本地有commit, ...
随机推荐
- A*算法深入
A*算法思想容易理解,但要想设计出好的A*算法,则必需要全面深入了解它.在本文章中接下来的内容中,将全面深入探讨该话题.如果对该算法还没有理解的话,则请先查阅上篇文章<A*算法入门>,然后 ...
- 那些年被我坑过的Python——道阻且长(第五章实用模块讲解)
random模块 我的随机验证吗程序: 首先保证了字母和数字出现的概率是50% VS 50%,其次是可以订制输出多少位 def Captcha(size): Captcha_list = [] for ...
- php开发环境安装配置(1)
个人记录高手请勿喷! 下载xampp我这是个中文版的可以自己搜索下载安装别的版本也行. 双击下载的xampp会提示路径相当于解压到指定的路径 到对应路径去可看到如下: 打开 2.配置: 成功之后会如下 ...
- test知识
内部测试SIT ——system integration testcase 用户测试UAT——user acceptance test SIT是集成测试UAT是验收测试从时间上看,UAT要在SIT后面 ...
- DELL 720XD和R820玩赏
- VS2015开发的Office Addin部署,安装时报错:无法解析属性“type”的值。
用VS2012开发的Outlook插件,在多数情况下安装正常,但是在某些机器上,安装时出现以下错误: 打开VSTOInstaller.exe.config文件查看,其中内容是: <?xml ve ...
- List、Set、 数组等转字符串
public class Test { public static void main(String[] args) { String str = ""; // list转字符串 ...
- C语言基础课程 第一课 Linux环境配置小实战httpserver
网段我需要改成如下 10.重启网络服务 并且查看ip 11. 打开windows的浏览器数人Linux的IP地址出现REDHAT的欢迎界面 11.进入目录 12.编写一个简单的html脚本 13 ...
- 3C Tic-tac-toe
题目大意: 两个选手轮流在 3*3的矩阵上作标记,一个选手总是画一个‘X’, 另一个选手总是画一个‘0’,谁先在水平线上或者垂直线上,或者对角线上,先完成三个点连在一块,谁就赢.画‘×’的选手是第一个 ...
- 数据结构(括号序列,线段树||点分治,堆):ZJOI 2007 捉迷藏
[题目描述] Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N- ...