Android App在线更新的代码

转载 2016年08月30日 16:13:22
import java.io.File;   
import java.io.FileOutputStream;   
import java.io.InputStream;   
import java.net.URL;   
import java.net.URLConnection;   
import android.app.Activity;   
import android.app.AlertDialog;   
import android.app.ProgressDialog;   
import android.content.Context;   
import android.content.DialogInterface;   
import android.content.Intent;   
import android.content.pm.PackageInfo;   
import android.content.pm.PackageManager.NameNotFoundException;   
import android.net.ConnectivityManager;   
import android.net.NetworkInfo;   
import android.net.Uri;   
import android.util.Log;   
import android.webkit.URLUtil;   
import com.hiyo.game.pdk.activity.R;   
/**  
 * Android AutoUpdate.  
 *   
 * lazybone/2010.08.20  
 *   
 * 1.Set apkUrl.  
 *   
 * 2.check().  
 *   
 * 3.add delFile() method in resume()\onPause().  
 */  
public class MyAutoUpdate {   
    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:81/ApiDemos.apk";   
    private ProgressDialog dialog;   
    public MyAutoUpdate(Activity activity) {   
        this.activity = activity;   
        getCurrentVersion();   
    }   
    public void check() {   
        if (isNetworkAvailable(this.activity) == false) {   
            return;   
        }   
        if (true) {// Check version.   
            showUpdateDialog();   
        }   
    }   
    public static boolean isNetworkAvailable(Context ctx) {   
        try {   
            ConnectivityManager cm = (ConnectivityManager) ctx   
                    .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("Title")   
                .setIcon(R.drawable.icon)   
                .setMessage("Update or not?")   
                .setPositiveButton("Update",   
                        new DialogInterface.OnClickListener() {   
                            public void onClick(DialogInterface dialog,   
                                    int which) {   
                                downloadTheFile(strURL);   
                                showWaitDialog();   
                            }   
                        })   
                .setNegativeButton("Cancel",   
                        new DialogInterface.OnClickListener() {   
                            public void onClick(DialogInterface dialog,   
                                    int which) {   
                                dialog.cancel();   
                            }   
                        }).show();   
    }   
    public void showWaitDialog() {   
        dialog = new ProgressDialog(activity);   
        dialog.setMessage("Waitting for update...");   
        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();   
        }   
    }   
    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;   
            Runnable r = new Runnable() {   
                public void run() {   
                    try {   
                        doDownloadTheFile(strPath);   
                    } catch (Exception e) {   
                        Log.e(TAG, e.getMessage(), e);   
                    }   
                }   
            };   
            new Thread(r).start();   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }   
    private void doDownloadTheFile(String strPath) throws Exception {   
        Log.i(TAG, "getDataSource()");   
        if (!URLUtil.isNetworkUrl(strPath)) {   
            Log.i(TAG, "getDataSource() It's a wrong URL!");   
        } 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();   
        }   
    }   
    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;   
    }   
}  

Android实现在线更新的过程案例

一、更新软件的准备 在线更新软件的话需要我们有签名的应用,我们需要把签过名之后的软件放入到服务器中,我的如下: 其中apk是有签名的更新版本! updateinfo.html...
  • u010870518
  • u010870518
  • 2015年03月15日 20:50
  • 2728

简单实现安卓app自动更新功能

实现简单安卓app自动更新: 1.服务端提供接口 2.客户端获取接口数据,解析,获取最新版本信息 3.安装最新版本...
  • wuyinlei
  • wuyinlei
  • 2016年03月01日 13:25
  • 14265

Android app智能升级(增量更新)

原理: 服务器发布新版本v1.1,客服端当前版本为v1.0,使用bsdiff生成差分包patch_v1.0_v1.1,然后客户端下载patch包到本地然后与本地的v1.0.apk合并生成v1.1.a...
  • yang7206
  • yang7206
  • 2015年10月08日 14:32
  • 869

关于Android的自动更新库(使用心得)

起因公司是工厂类型的,App是内部的员工使用的,所以我的App不需要上线,每次用AndroidStudio写好新版本之后,拿到车间给他们一个个装好就行。但是这样就很麻烦,而且还有比较远的工厂里面的工人...
  • Travelerrr
  • Travelerrr
  • 2017年02月10日 11:11
  • 2279

UpdateAppUtils一行代码实现app在线更新

UpdateAppUtils一行代码,快速实现app在线下载更新A simple library for Android update app 先看效果图: 集成compile引入dependen...
  • Teprinciple
  • Teprinciple
  • 2017年08月17日 12:12
  • 547

app升级机制

iOS程序自动提示更新的实现方案大致分为两种: 第一种,自己服务器提供一个接口,告知相关app的当前版本,是否需要更新,以及更新的地址等信息 。 第二种,就是利用苹果的appstore 提供的相关ap...
  • xie244135119
  • xie244135119
  • 2014年10月28日 09:49
  • 276

Eclipse实现安卓客户端的版本更新

现在上线的APP大多要用到版本更新的功能,所以自己参考了有关更新代码,封装成了一个类,方便使用。该类实现加载MainActivity的时候自动检测是否是最新版本,如果不是则提示更新安装等操作。 1.权...
  • Mezzio
  • Mezzio
  • 2016年05月18日 15:37
  • 1155

Android实现APP自动更新功能

现在一般的android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新。该小程序实现的就是这个功能。 该小程序的特点是,当有更新时,会弹出一个提示框,点...
  • jdfkldjlkjdl
  • jdfkldjlkjdl
  • 2015年01月28日 17:03
  • 3013

Android Studio在线更新

Android studio 在线更新,不用翻墙啦 打开Android Studio安装的bin目录 64位、32位分别打开对应的vmoptions文件,添加上这样的几句代码-Djava.net.pr...
  • speverriver
  • speverriver
  • 2016年04月11日 23:01
  • 1676

Android应用更新-自动检测版本及自动升级

步骤: 1.检测当前版本的信息AndroidManifest.xml–>manifest–>[Android] 2.从服务器获取版本号(版本号存在于xml文件中)并与当前检测到的版本进行匹配,如果不匹...
  • Imshuyuan
  • Imshuyuan
  • 2017年03月17日 13:33
  • 9277
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android App在线更新的代码
举报原因:
原因补充:

(最多只允许输入30个字)