阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 2165|回复: 3

[推荐] Android版本检测\自动更新

[复制链接]
  • TA的每日心情
    开心
    2021-8-30 00:00
  • 签到天数: 35 天

    [LV.5]常住居民I

    发表于 2011-11-1 19:37:35 | 显示全部楼层 |阅读模式
                   
    package com.hiyo.game.pdk.tool;   
    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.DialogInte**ce;   
    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 DialogInte**ce.OnClickListener() {   
                               
    public void onClick(DialogInte**ce dialog,   
                                        
    int which) {   
                                    downloadTheFile(strURL);   
                                    showWaitDialog();   
                                }   
                            })   
                    .setNegativeButton(
    "Cancel",   
                            
    new DialogInte**ce.OnClickListener() {   
                               
    public void onClick(DialogInte**ce 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;   
        }   
    }  



    该贴已经同步到 sunwy的微博
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2021-3-19 12:48
  • 签到天数: 1539 天

    [LV.Master]伴坛终老

    发表于 2011-11-2 07:35:19 | 显示全部楼层
    不错,用安卓手机的朋友倒是件幸事。                             
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2024-3-8 13:55
  • 签到天数: 2673 天

    [LV.Master]伴坛终老

    发表于 2011-11-5 17:15:42 | 显示全部楼层
    俺看不懂!!看不懂呀!!!俺看不懂!!看不懂呀!!!
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2023-6-19 09:56
  • 签到天数: 613 天

    [LV.9]以坛为家II

    发表于 2011-11-9 12:44:46 | 显示全部楼层
                    不错!搞个包发一下吧!!!!!!!!!!
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表