Android 版本检测

android 自动检测版本,更新最新版本 阅读详情
    /** 
     *  
     * 版本检测,自动更新 
     * 1.通过Url检测更新 2.下载并安装更新 3.删除临时路径 
     *  
     */  
      
    public class Update {  
          
        // 调用更新的Activity  
        public Activity activity = null;  
        // 当前版本号  
        public int versionCode = 0;  
        // 当前版本名称  
        public String versionName = "";  
        // 控制台信息标识  
        private static final String TAG = "AutoUpdate";  
        // 文件当前路径  
        private String currentFilePath = "";  
        // 安装包文件临时路径  
        private String currentTempFilePath = "";  
        // 获得文件扩展名字符串  
        private String fileEx = "";  
        // 获得文件名字符串  
        private String fileNa = "";  
        // 服务器地址  
        private String strURL = "http://127.0.0.1:8080/ApiDemos.apk";  
      
          
        private ProgressDialog dialog;  
      
        /** 
         *  
         * 构造方法,获得当前版本信息 
         *  
         *  
         * @param activity 
         */  
        public Update(Activity activity) {  
            this.activity = activity;  
            // 获得当前版本  
            getCurrentVersion();  
        }  
      
        /** 
         *  
         * 检测更新 
         */  
        public void check() {  
      
            // 检测网络  
            if (isNetworkAvailable(this.activity) == false) {  
                return;  
            }  
      
            // 如果网络可用,检测到新版本  
            if (true) {  
                // 弹出对话框,选择是否需要更新版本  
                showUpdateDialog();  
            }  
        }  
      
        /** 
         *  
         * 检测是否有可用网络 
         *  
         *  
         * @param context 
         *  
         * @return 网络连接状态 
         */  
      
        public static boolean isNetworkAvailable(Context context) {  
            try {  
                ConnectivityManager cm = (ConnectivityManager) context  
                .getSystemService(Context.CONNECTIVITY_SERVICE);  
                // 获取网络信息  
                NetworkInfo info = cm.getActiveNetworkInfo();  
                // 返回检测的网络状态  
                return (info != null && info.isConnected());  
            } catch (Exception e) {  
                e.printStackTrace();  
                return false;  
            }  
      
        }  
      
        /** 
         *  
         * 弹出对话框,选择是否需要更新版本 
         */  
        public void showUpdateDialog() {  
            @SuppressWarnings("unused")  
            AlertDialog alert = new AlertDialog.Builder(this.activity)  
            .setTitle("新版本").setIcon(R.drawable.ic_launcher)  
            .setMessage("是否更新?")  
            .setPositiveButton("是", new DialogInterface.OnClickListener() {  
                public void onClick(DialogInterface dialog, int which) {  
                    // 通过地址下载文件  
                    downloadTheFile(strURL);  
                    // 显示更新状态,进度条  
                    showWaitDialog();  
                }  
            })  
      
            .setNegativeButton("否", new DialogInterface.OnClickListener() {  
                public void onClick(DialogInterface dialog, int which) {  
                    dialog.cancel();  
                }  
            }).show();  
        }  
      
        /** 
         *  
         * 显示更新状态,进度条 
         */  
      
        public void showWaitDialog() {  
            dialog = new ProgressDialog(activity);  
            dialog.setMessage("正在更新,请稍候...");  
            dialog.setIndeterminate(true);  
            dialog.setCancelable(true);  
            dialog.show();  
        }  
      
        /** 
         *  
         * 获得当前版本信息 
         */  
      
        public void getCurrentVersion() {  
            try {  
                // 获取应用包信息  
                PackageInfo info = activity.getPackageManager().getPackageInfo(  
                activity.getPackageName(), 0);  
                this.versionCode = info.versionCode;  
                this.versionName = info.versionName;  
            } catch (NameNotFoundException e) {  
                e.printStackTrace();  
            }  
        }  
      
        /** 
         *  
         * 截取文件名称并执行下载 
         *  
         *  
         * @param strPath 
         */  
        private void downloadTheFile(final String strPath) {  
            // 获得文件文件扩展名字符串  
            fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length())  
            .toLowerCase();  
            // 获得文件文件名字符串  
            fileNa = strURL.substring(strURL.lastIndexOf("/") + 1,  
            strURL.lastIndexOf("."));  
            try {  
                if (strPath.equals(currentFilePath)) {  
                    doDownloadTheFile(strPath);  
                }  
                currentFilePath = strPath;  
                new Thread(new Runnable() {  
                    @Override  
                    public void run() {  
                        // TODO Auto-generated method stub  
                        try {  
                            // 执行下载  
                        doDownloadTheFile(strPath);  
                        } catch (Exception e) {  
                            Log.e(TAG, e.getMessage(), e);  
                        }  
                    }  
                }).start();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
      
        /** 
         *  
         * 执行新版本进行下载,并安装 
         *  
         *  
         * @param strPath 
         *  
         * @throws Exception 
         */  
        private void doDownloadTheFile(String strPath) throws Exception {  
            Log.i(TAG, "getDataSource()");  
            // 判断strPath是否为网络地址  
            if (!URLUtil.isNetworkUrl(strPath)) {  
                Log.i(TAG, "服务器地址错误!");  
            } else {  
                URL myURL = new URL(strPath);  
                URLConnection conn = myURL.openConnection();  
                conn.connect();  
                InputStream is = conn.getInputStream();  
                if (is == null) {  
                    throw new RuntimeException("stream is null");  
                }  
                // 生成一个临时文件  
                File myTempFile = File.createTempFile(fileNa, "." + fileEx);  
                // 安装包文件临时路径  
                currentTempFilePath = myTempFile.getAbsolutePath();  
                FileOutputStream fos = new FileOutputStream(myTempFile);  
                byte buf[] = new byte[128];  
                do {  
                    int numread = is.read(buf);  
                    if (numread <= 0) {  
                        break;  
                    }  
                    fos.write(buf, 0, numread);  
                } while (true);  
                Log.i(TAG, "getDataSource() Download ok...");  
                dialog.cancel();  
                dialog.dismiss();  
                // 打开文件  
                openFile(myTempFile);  
                try {  
                    is.close();  
                } catch (Exception ex) {  
                    Log.e(TAG, "getDataSource() error: " + ex.getMessage(), ex);  
                }  
            }  
        }  
      
        /** 
         *  
         * 打开文件进行安装 
         *   
         */  
        private void openFile(File f) {  
            Intent intent = new Intent();  
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
            intent.setAction(android.content.Intent.ACTION_VIEW);  
            // 获得下载好的文件类型  
            String type = getMIMEType(f);  
            // 打开各种类型文件  
            intent.setDataAndType(Uri.fromFile(f), type);  
            // 安装  
            activity.startActivity(intent);  
        }  
      
        /** 
         *  
         * 删除临时路径里的安装包 
         */  
      
        public void delFile() {  
            Log.i(TAG, "The TempFile(" + currentTempFilePath + ") was deleted.");  
            File myFile = new File(currentTempFilePath);  
            if (myFile.exists()) {  
                myFile.delete();  
            }  
        }  
      
        /** 
         *  
         * 获得下载文件的类型 
         *  
         *  
         * @param f 
         *  
         *            文件名称 
         *  
         * @return 文件类型 
         */  
      
        private String getMIMEType(File f) {  
            String type = "";  
            // 获得文件名称  
            String fName = f.getName();  
            // 获得文件扩展名  
            String end = fName  
            .substring(fName.lastIndexOf(".") + 1, fName.length())  
            .toLowerCase();  
            if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")  
            || end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {  
                type = "audio";  
            } else if (end.equals("3gp") || end.equals("mp4")) {  
                type = "video";  
            } else if (end.equals("jpg") || end.equals("gif") || end.equals("png")  
            || end.equals("jpeg") || end.equals("bmp")) {  
                type = "image";  
            } else if (end.equals("apk")) {  
                type = "application/vnd.android.package-archive";  
            } else {  
                type = "*";  
            }  
            if (end.equals("apk")) {  
            } else {  
                type += "/*";  
            }  
            return type;  
        }  
      
    }  

来源:http://blog.youkuaiyun.com/t80t90s/article/details/7946958



Android之版本检测和更新 版本检测和更新 APP不可能一次把功能全做完,当我们需要更新的时候,可以自己写,也可以用第三方更新,比如友盟更新,首先我们需要获取我们APP当前的版本,关键代码如下 private String getVersionCode() { try { String pkName = this.getPackageName(); Strin 阅读详情

相关推荐

安卓版本检测工具类

用于检测版本是否需要更新,换掉url地址直接可以用

Android实现App版本检测、下载与安装新版本apk

背景 很多Android应用都内置了新版本检测与在线更新功能,这个简单的功能主要包括检测、下载、安装三个环节,演示效果如下: 下载完成以后,自动打开apk,跳到安装界面,交由用户操作: 思路 想要实现上述功能,主要是分三个步骤来进行: App端向服务端发送网络请求,获取App的最新版本号信息,进行比较,如果服务端返回的版本号大于当前App的版本号,则开启第二步,下载新版本App; 有新版本App时,开启下载,并在界面上给出下载进度提示,增加交互性; 在下载达到100%的进度时,通过代码打开apk实现安

海阔天空 7938

android 版本检测 Android程序的版本检测与更新实现介绍

做个网站的安卓客户端,用户安装到自己手机上,如果我出了新版本怎么办呢?要有版本更新功能。 本来版本检测最好可以自动进行。但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本更新是小概率的事情。或许可以程序开启的时候,判断一下时间,单日就检测,双日就不检测,或者随机什么的,降低一下检测的频率? 我采取的做法是将检测功能做到了菜单上,用户有需要,就手动打开自己检测一下。反正我们这个是网站客户端,有版本更新,在网站上发个通告就行了。 版本检测与更新有以下几个关键步骤: 1、检测有无新版本 2、下载新版本 3、安装替换新版本 我处理的方案是 1、在assets文件夹新增一个文件:ver.cfg,记

Android版本更新知识(检测、升级)总结

Android版本更新知识(检测、升级)总结        本文对Android版本更新的知识做全面的总结,主要包括开发中版本的设置,如何检测本程序的版本,版本的更新判断和显示,新版本程序的安装。一.版本的基础知识        版本控制的属性包括versionCode和versionName。

wenzhi的博客 3万+

避坑指南:Abaqus网格划分中90%用户会遇到的5个质量陷阱(附解决方案)

本文深入剖析Abaqus网格划分中90%用户会遇到的5个典型质量陷阱,包括单元扭曲、扫掠网格失败、尺寸梯度控制等,并提供工程级解决方案。通过Python脚本和虚拟拓扑等技巧,帮助用户提升网格质量,确保有限元分析结果的可靠性,适用于CAE工程师和仿真分析师。

weixin_29243279的博客 99

华中科技大学 计算机组成原理 educoder Logisim平台 计算机数据表示实验

本文主要是对 计算机数据表示实验的笔记和相关Logisim平台的图,供大家学习交流使用。 需要源文件或者源代码,可以留言评论! 目录实验目的第1关:汉字国标码转区位码实验第2关:汉字机内码获取实验第3关:偶校验编码设计第4关:偶校验解码电路设计第5关:16位海明编码电路设计第6关:16位海明解码电路设计第7关:海明编码流水传输实验第8关:16位CRC并行编解码电路设计第9关:CRC编码流水传输实验实验结果: 实验目的 本实训将帮助同学们巩固对计算机中数据表示方法的理解,要求能设计汉字国标码与区位码之间的转换

weixin_48383580的博客 2万+

如何查看安卓版本号的方法(例如查看是13、12、11、10...)

如何查看安卓版本号的方法(例如查看是13、12、11、10...)

m0_65292523的博客 2万+

LVGL字体优化实战:如何将中文字库放到外部SPI Flash并动态加载(节省内部RAM)

本文详细介绍了LVGL在嵌入式UI开发中如何通过外部SPI Flash存储中文字库并动态加载,以节省内部RAM资源。通过对比不同存储介质和字库格式,提供多种实现方案及性能优化技巧,帮助开发者在资源受限设备上实现高效的中文显示。

weixin_28693683的博客 345

安卓apk版本检测下载升级全过程

一般情况下,app要有在线升级的功能,以便app的功能不断完善改进。不同Android版本app升级的方法也不尽相同,版本不对,升级时,要么无法下载apk,要么下载后无法安装。今天介绍的是Android studio3.6.3版本,compileSdkVersion 为29,gradle版本为gradle-4.1-all的检测版本,下载新版本和安装,打包签名全过程。。

m0_72963799的博客 4871

Android12 车载开发TaskView实现分屏

这里只给出TaskView的代码,相关联的源码,请看源码,如果想要使用TaskView需要自己去编译frameWork的源码,打包一个aar,或者jar出来使用,否则无法直接使用。1.如果分屏的应用如启动两个应用按照权重占比,互相不叠加在一起,点触摸击事件都可响应,例如左边启动QQ了,右边启动的是微信,二者窗口都可操作。TaskView是谷歌整合安卓多任务多窗口下交互重新重构的独立出来的module,本身继承自ServiceView,TaskView的相关概念性的东西参考。//创建的taskview。

android_bird_bird的博客 9551

别再死磕U-Net了!用PyTorch手把手教你搭建ResUnet,搞定医学图像分割(附完整代码)

本文详细介绍了如何利用PyTorch搭建ResUnet模型,通过引入残差连接解决医学图像分割中的梯度消失、特征退化和细节丢失问题。与传统U-Net相比,ResUnet在Dice系数和收敛速度上均有显著提升,特别适合处理脑部MRI等复杂医学图像。文章还提供了完整的代码实现和关键训练技巧,帮助开发者快速掌握这一先进技术。

weixin_42552637的博客 327

android开发之版本检测,Android版本检测更新详解

最近看到有一篇文章,主要写Android如何检测版本更新,但有点无语,其实挺简单的问题,被说的如此复杂。于是想记录下来,希望能帮到需要的人。检测版本更新的思路:1.首先获取现app的versionCode,然后跟服务器返回的versionCode对比,若小于服务器的versionCode,则说明有新版本了,需要更新了。2.服务器提供新版本的apk地址,共客户端进行下载安装。服务端返回的新版本信息:...

weixin_39692271的博客 674

ArcGIS | 全球新冠肺炎地图数据下载和处理

ArcGIS

thinkpang的博客 2901

Android apk版本检测及更新

很多Android应用都具有版本检测自动更新功能,用户一键就可以完成软件的升级更新。这得益于Android系统的软件包管理和安装机制,这一功能实现起来也很简单。   Android的apk版本信息的获取: 定义在androidmanifest.xml里       package="com.huazi.updateapksamples"       android:versionCo

jonemill的专栏 1474

MatterPort3D 数据集下载

【代码】MatterPort3D 数据集下载。

qq_44106838的博客 6785

C#怼倍福TwinCAT3:ADS协议封装实战(附完整读写源码+避坑清单)

变量名大小写敏感:PLC里定义的是GVL.bStart,你写GVL.BStart绝对读不到;数组访问格式:PLC数组是,C#里读单个元素要写,读整个数组不用写索引;句柄要释放:用创建的句柄,一定要用using包起来,否则会占着资源;PLC必须运行:哪怕变量定义对了,PLC没Run(只是Login)也读不到数据;路由配置:如果上位机和PLC不在一个网段,要在TwinCAT3里添加路由(Router→Edit Routes)。倍福ADS通信其实不难,核心就是“配置对+变量名写对+数据类型匹配”。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 950

安卓php版本升级,Android编程实现自动检测版本及自动升级的方法

本文实例讲述了Android编程实现自动检测版本及自动升级的方法。分享给大家供大家参考,具体如下:步骤:1.检测当前版本的信息AndroidManifest.xml-->manifest-->android:versionName。2.从服务器获取版本号(版本号存在于xml文件中)并与当前检测到的版本进行匹配,如果不匹配,提示用户进行升级,如果匹配则进入程序主界面。3.当提示用户进行版...

weixin_39962675的博客 261

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

版本检查更新java代码,android 版本检测 Android程序的版本检测与更新实现介绍

做个网站的安卓客户端,用户安装到自己手机上,如果我出了新版本怎么办呢?要有版本更新功能,感兴趣的朋友可以了解下做个网站的安卓客户端,用户安装到自己手机上,如果我出了新版本怎么办呢?要有版本更新功能。本来版本检测最好可以自动进行。但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本更新是小概率的事情。或许可以程序开启的时候,判断一下时间,单日就检测,双日就不检测,或者随机什么的,降低一下检测的频...

weixin_33280038的博客 519

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android程序的版本检测与更新

Android程序的版本检测与更新

hddfuuh的博客 479

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

安卓实现APP自动检测软件版本并提示更新

安卓实现APP自动检测软件版本并提示更新 前言 当我们在做安卓项目的时候,客户的需求往往难免会发生变动。但是我们的产品已经上线了,却又需要修改的话我们该怎么办呢?也许很多应用商店已经集成了这个功能,只需要开发者上传新的APK文件即可,应用商店会自动进行提醒用户进行应用更新。可是对于那些因可能不想写申请著作权相关的文件又或着产品急于上线而无法上线到应用商店的APP又该怎么办呢?(这里提一句:绝大多数应用商店在开发者发布应用的时候需要提供软件的著作权,而申请软著则需要写一些相关的文件,然后提交上去之后还需要等

qq_33501751的博客 7669

Android怎么检测版本,android 应用自身检测版本并下载

思路:1在服务器固定目录存放固定的了版本文件;2.应用请求服务器端的版本文件,判断是否有最新版本;3.创建下载连接,下载最新apk;importjava.io.File;importjava.io.IOException;importjava.io.InputStream;importjava.net.HttpURLConnection;importjava.net.MalformedU...

weixin_42133861的博客 328

vue 安卓端自动检测版本以及更新app

今天实现了H5app自动检测更新,在这里记录下。 首先分析需求 我们要想实现这个自动更新的功能大致分三步: 1.查询线上版本号,然后拿本地版本号与之对比。 2. 若线上版本号比本地版本号大,则下载线上版本。 3. 把下载好版本安装,并替换当前旧版本。 代码实现 判断用户手机系统 let isAndroid = u.indexOf('Android') > -1 || u.indexOf(...

weixin_45754967的博客 4754

Android studio app版本检测更新

基本上每个都要检测更新的功能,参考了下大佬的文章,弄了个简化版的记录一下。在安卓6.0和9.0版本中都试过了,可以用 参考文章: https://blog.youkuaiyun.com/fengyuzhengfan/article/details/52876586 https://blog.youkuaiyun.com/MingHuang2017/article/details/82830727 直接复...

qq_630097928的博客 2623

Android 版本检测更新

Android版本检测更新是每个应用升级所不可少的,以前早就做过一些,一直没有时间与大家分享,现在就跟大家来分享一下我做的版本检测更新吧。先上图 点击更新之后的 可能有人会问为啥点击更新提示框不消失啊,可以根据自己的情况而定,有的需要强制更新,也是为了方便用户看到下载的进度。我这里只是为了测试一下效果而已。真正的是点击更新以后会在通知栏里面进行显示的 效果就是这样的 也有的可能需要

刘永祥的专栏 1万+

android检测更新版本,android 版本检测与自动更新

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package com.hiyo.game.pdk.tool;import java.io.File;import java.io.FileOutputStream;import java.io.I...

weixin_39524048的博客 216

【YOLO】基于yolov5的Android版本目标检测app开发(部署安卓手机)

基于yolov5的Android版本目标检测app开发(部署安卓手机) 1、开发环境搭建 2、数据集准备 3、模型训练 4、模型转换 5、Androidapp开发 6、运行检测 7、项目开发中遇到的问题总结

1万+
上一篇: android intent和intent action大全
下一篇: Android 轻松实现语音识别
SpeedyCoder
博客等级 码龄14年 415粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值