`
sailei1
  • 浏览: 127045 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

phonegap android更新

阅读更多

package com.club.test;

import org.apache.cordova.DroidGap;
import android.os.Bundle;


import android.view.Menu; 
import android.view.MenuItem;
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.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.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class Club16Activity extends DroidGap {
    /** Called when the activity is first created. */
	
	String newVerName = "";//版本名称
    int newVerCode = -1;//版本号
    ProgressDialog pd = null;
    String UPDATE_SERVERAPK = "Club16.apk";
    String  downUrl="http://114.112.41.50:8006/android/Club16.apk";
    String  serverurl="http://114.112.41.50:8006/android/version.js";
    boolean result=false; //更新标识
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	 
    	 super.onCreate(savedInstanceState);
          //super.setBooleanProperty("keepRunning", false);
    	 super.setIntegerProperty("loadUrlTimeoutValue",60000);
        updateVersion();//启动时就检查 或者 在菜单中调用
        if(!result){
        super.loadUrl("file:///android_asset/www/index.html");}
        
    }
    
    public void updateVersion(){
        if(getServerVer()){
               int verCode = this.getVerCode(this);
               if(newVerCode>verCode){
                   doNewVersionUpdate();//更新版本
               }
//               else{
//                   //alert("")
//                 notNewVersionUpdate();//提示已是最新版本
//               }
           }
       }
          /**
             * 获得版本号
             */
            public int getVerCode(Context context){
                int verCode = -1;
                try {
                 String packName = context.getPackageName();
                    verCode = context.getPackageManager().getPackageInfo(packName, 0).versionCode;
                    System.out.println("当前版本号:"+ verCode);
                } catch (NameNotFoundException e) {
                    // TODO Auto-generated catch block
                    Log.e("版本号获取异常", e.getMessage());
                }
                return verCode;
            }
            /**
             * 获得版本名称
             */
            public String getVerName(Context context){
                String verName = "";
                try {
                 String packName = context.getPackageName();
                    verName = context.getPackageManager().getPackageInfo(packName, 0).versionName;
                } catch (NameNotFoundException e) {
                    Log.e("版本名称获取异常", e.getMessage());
                }
                return verName;
            }
            
            /**
             * 从服务器端获得版本号与版本名称
             * @return
             */
            public boolean getServerVer(){
                try {
                    URL url = new URL(serverurl);
                    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 true;//如果这里改为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(" 当前版本号:");
                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("当前版本号:");
                sb.append(verCode);
                sb.append(",发现版本名称:");
                sb.append(newVerName);
                sb.append(" 版本号:");
                sb.append(newVerCode);
                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(Club16Activity.this);
                        pd.setTitle("正在下载");
                        pd.setMessage("请稍后。。。");
                        pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                        result=true;
                        System.out.println("result 下载"+result);
                        downFile(downUrl);
                        
                    }
                })
                .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);
            }
    
}




服务器上version.js 文件格式 [{"verName":"app","verCode":2}]
参考 http://www.cnblogs.com/henshui/articles/2475533.html
分享到:
评论

相关推荐

    phonegap在线更新插件(android)

    本插件专注于PhoneGap在Android平台上的在线更新功能,旨在解决一个特定的问题:即在Android 7.0及以上版本中,通过下载安装APK更新时可能出现的应用闪退现象。 在Android系统中,特别是从7.0版开始,谷歌引入了更...

    phonegap之android示例

    这个“phonegap之android示例”项目,显然是一个基于PhoneGap技术,专为Android平台设计的示例应用。通过这个项目,我们可以深入理解PhoneGap如何与Android原生环境相结合,以及如何利用JavaScript进行移动应用开发...

    phonegap android 录音照相录像 demo

    在这个“phonegap android 录音照相录像 demo”项目中,我们将会探讨如何使用PhoneGap在Android平台上实现录音、照相和录像功能。 1. PhoneGap基础知识: PhoneGap的核心是基于Apache Cordova,它提供了一个...

    Android代码-phonegap-android

    PhoneGap Android is an Android application library that allows for PhoneGap-based projects to be built for the Android Platform. PhoneGap-based applications are, at the core, an application written in...

    phonegap android demo

    PhoneGap Android Demo是一个基于PhoneGap框架的Android应用示例,旨在帮助开发者理解如何在Android平台上使用PhoneGap技术来构建跨平台的移动应用。PhoneGap是一个开源的开发框架,它允许开发者使用HTML、CSS和...

    Phonegap 自动更新 updateApp Android

    在Android平台上,PhoneGap的应用程序可以通过更新插件进行版本更新,以保持应用的最新状态,提高用户体验。本文将详细介绍PhoneGap的自动更新机制,特别是针对Android平台的`updateApp`插件的使用。 一、PhoneGap...

    android之PhoneGap入门实例

    PhoneGap的核心理念是通过Web技术实现与移动设备硬件的交互,让开发者能够利用熟悉的Web开发技能开发出能在iOS、Android、Windows Phone等多平台运行的应用。 在"android之PhoneGap入门实例"中,我们首先需要了解...

    android+Phonegap开发环境搭建

    总之,搭建Android+PhoneGap开发环境涉及安装JDK、Android Studio、Node.js和PhoneGap CLI,配置Android SDK,以及创建和运行第一个PhoneGap项目。掌握这个过程后,开发者就可以利用Web技术开发出能在Android平台上...

    phoneGap-android实现拍照和选择图库

    在Android平台上,PhoneGap提供了一个便捷的方式来整合设备的功能,比如摄像头和图库,使得Web开发者能够轻松地实现拍照和选择图库图片的操作。 1. PhoneGap基础: PhoneGap的核心是Cordova,一个开源的移动设备...

    PhoneGap android的Toast插件

    Android的Toast插件是PhoneGap生态中的一个重要组件,用于在Android设备上显示短暂的通知信息,类似于原生Android开发中的Toast功能。 首先,`ToastPlugin.java`是这个插件的核心Java代码,它负责与PhoneGap的...

    phonegap完整例子!

    - 开发PhoneGap应用时,需要配置Android开发环境,包括安装Android Studio、Java Development Kit (JDK)和Android SDK。 - 创建PhoneGap项目时,首先需要在命令行中使用PhoneGap或Cordova CLI初始化一个新的项目...

    Phonegap Android 系统推送例子

    在这个“Phonegap Android 系统推送例子”中,我们将深入探讨如何在Android平台上使用PhoneGap实现系统推送功能,这涉及到Java语言的运用以及与PhoneGap框架的集成。 首先,我们需要理解什么是系统推送。在移动应用...

    自定义plugin插件实现phonegap与Android交互

    在"自定义plugin插件实现phonegap与Android交互"这个主题中,我们主要关注的是如何通过编写自定义插件来打通JavaScript和Android之间的通信壁垒。在PhoneGap中,Plugin是连接Web层和Native层的桥梁,它们是用Java...

    android+phonegap+jquery mobile

    【标题】:“Android + PhoneGap + jQuery Mobile” 这个项目标题揭示了一个使用三种技术栈构建的移动应用程序:Android、PhoneGap和jQuery Mobile。Android是Google主导的开源操作系统,主要用于智能手机和平板...

    PhoneGap Android插件 调用toast 和 notification

    在Android平台上,PhoneGap通过一个叫做Cordova的内核与设备的API进行交互,使得Web应用可以访问设备的功能,如摄像头、联系人、GPS等。在本例中,我们关注的是如何在PhoneGap应用中调用Android的`Toast`和`...

    phonegap调用android插件实现GPS定位

    在本教程中,我们将探讨如何使用PhoneGap调用Android插件来实现GPS实时定位。 一、PhoneGap与Android插件 PhoneGap的插件系统是连接Web层和原生层的关键。当在JavaScript中调用一个PhoneGap API时,实际上是在调用...

    android与phonegap混合开发之相互跳转

    在移动应用开发领域,PhoneGap和Android是两种广泛使用的平台。PhoneGap是一种基于HTML5、CSS3和JavaScript的跨平台框架,它允许开发者使用Web技术创建原生移动应用。而Android则是Google主导的开源操作系统,提供了...

    phonegap开发安卓

    - 使用Chrome开发者工具的Remote Debugging功能,可以在浏览器中实时查看和调试运行在Android设备上的PhoneGap应用。 - 使用PhoneGap Build服务,可以远程编译和分发应用到不同平台,而无需在每个平台上单独构建。...

    phonegap android

    ### PhoneGap Android:指南针插件详解 #### 引言 在移动应用开发领域,PhoneGap作为一款跨平台的应用框架,让开发者能够使用HTML、CSS和JavaScript等Web技术来构建原生应用程序,大大提升了开发效率。其中,指南...

    phoneGap实现android平台登录例子

    在这个“phoneGap实现android平台登录例子”中,我们将探讨如何利用PhoneGap在Android平台上创建一个简单的登录功能,这对于初学者来说是一个很好的入门实践。 首先,我们需要了解PhoneGap的基础知识。PhoneGap是...

Global site tag (gtag.js) - Google Analytics