`

android 自动更新apk版本

 
阅读更多

原文地址: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安装

    在Android应用开发中,适配不同的系统版本是一项重要的任务,特别是在自动更新APK的过程中。本文将深入探讨如何解决Android10以下及以上的系统版本中,下载更新的APK自动安装失败的问题,为开发者提供实用的解决方案...

    Android 自动安装apk

    在Android平台上,自动安装APK是一项常见的操作,尤其对于开发者来说,这有助于快速测试和部署应用。本示例,"Android 自动安装apk",提供了一个DEMO,它允许用户无需手动操作即可安装APK文件。这个过程涉及到...

    Android自动更新的demo

    这个"Android自动更新的demo"就是一个展示如何在Android应用中实现自动检查和下载更新的示例。以下是对这个主题的详细解释: 一、自动更新机制 1. 检测更新:首先,应用需要在后台定期或者在启动时检测是否有新...

    android 版本更新 APK 下载 安装

    本教程将详细解释如何进行Android版本更新,包括下载新版本的APK文件以及如何在设备上安装。 一、APK 文件及其作用 APK 文件是一个包含所有必要组件的压缩包,包括代码、资源、库和应用程序的清单文件。当用户在...

    demo.apk unity自动更新 内部安装Apk

    unity 内部更新Apk 自动安装 支持安卓8.0 以上 demo.apk 测试包

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

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

    Android实现下载APK文件并自动执行安装

    在Android平台上,实现从网络下载APK文件并自动执行安装是一个常见的需求,尤其在更新应用或者分发非市场应用时。这个过程涉及到多个步骤,包括网络请求、文件下载、权限处理以及安全检查。下面我们将详细讲解如何...

    android-APK自动更新.rar

    总结,实现Android APK的自动更新需要考虑多个方面,包括权限管理、系统版本适配、后台任务执行等。通过合理的设计和编码,可以为用户提供便捷、安全的自动更新体验。而“android-APK自动更新.rar”资源正好提供了...

    Android 更新下载apk 安装apk 打开apk

    在Android平台上,更新、下载、安装以及打开APK文件是应用程序生命周期中的常见操作。下面将详细阐述这些过程及其相关的知识点。 一、Android APK文件 APK(Android Package)是Android系统中应用程序的安装包,...

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

    在Android应用开发中,自动更新功能是至关重要的,它能够帮助开发者及时修复程序中的错误,增加新特性,并确保用户始终使用的是最新版本的应用。"Android 应用软件自动更新源码"是一个示例项目,旨在教授如何在...

    Android 自动更新 下载文件 APK

    通过以上步骤,你可以构建一个完整的Android应用自动更新系统,能够无缝地检测、下载并安装新版本的APK文件。"DownLoadDemo"源代码实例将详细展示这些实现细节,为开发者提供了一个实用的参考模板。在实际项目中,...

    用于unity Android 平台做apk自动更新Jar包.zip

    虽然在这个特定场景中,AppCompat库可能并非直接用于apk自动更新,但它是Unity Android项目中常见的依赖,因为它能确保应用在不同Android版本上的视觉一致性。 实现Unity中的Android APK自动更新,通常涉及以下步骤...

    Android7.0下载Apk自动安装

    本教程将详细讲解如何在Android 7.0及更高版本上实现Apk的自动下载与安装,主要基于提供的"InstallAPKDemo"示例项目。 首先,理解Android 7.0的权限管理变化是至关重要的。在之前的版本中,用户在安装应用时会一次...

    android版本自动更新

    在Android平台上,实现应用的版本自动更新是一项重要的功能,它能确保用户始终使用到最新、最安全的软件版本。这个过程通常涉及到服务器端的更新管理、客户端的检测和下载以及安装流程。以下将详细讲解这一过程中的...

    Android版本更新(检测、升级),检测版本,通过apk路径下载安装包

    在Android应用开发中,版本更新是维持应用活力和安全性的关键环节。本文将详细探讨如何在Android系统中实现版本检测、下载以及安装的过程,确保用户能够及时获取到最新的应用版本。 首先,我们要实现版本检测。这...

    Android apk自动更新版本程序

    综上所述,创建一个Android apk自动更新版本程序涉及到多个步骤,包括获取Google Play的更新信息、处理更新流程、以及在用户界面中适当地提示和执行更新。通过这些技术,你可以确保用户始终使用应用的最新版本,从而...

    Android 自动更新程序

    本篇文章将深入探讨如何构建一个Android自动更新程序,包括其背后的原理、实现步骤以及可能遇到的问题。 首先,我们要理解自动更新的核心原理。Android应用的自动更新通常基于Google Play Store或自建的应用市场。...

    Android apk更新安装代码

    本篇文章将详细介绍如何在Android应用中实现APK的自动更新安装功能。 首先,我们需要理解Android系统如何处理APK的安装过程。当用户下载一个APK文件后,系统默认的行为是通过点击文件或使用“安装未知应用”权限来...

    Delphi Android APP 自动更新

    在开发 Delphi Android 应用程序时,自动更新功能是一个重要的组成部分,它允许用户方便快捷地获取应用的最新版本,而无需手动下载安装。本文将详细介绍如何使用 RAD Studio 10.3.3 实现这一功能,并在 Android 10 ...

Global site tag (gtag.js) - Google Analytics