`
menjoy
  • 浏览: 422958 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Android版本检测\自动更新

阅读更多
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.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版本检测\自动更新 http://www.eoeandroid.com/thread-117764-1-1.html

分享到:
评论

相关推荐

    android app版本自动检测、更新

    自动更新功能需要访问网络和存储权限。在Android 6.0及以上版本,需要在运行时动态请求这些权限。 7. **静默更新**: 对于不想打扰用户的场景,开发者可以实现静默更新,即在后台下载并安装新版本,但需要处理好...

    Android项目版本检测自动更新.rar

    这个名为"Android项目版本检测自动更新.rar"的压缩包文件很可能包含一个完整的Android项目示例,用于实现这样的功能。让我们详细探讨一下这个话题。 1. **版本检测**:在Android应用中,通常会在启动时或者在后台...

    Android自动检测版本及自动升级

    在Android应用开发中,自动检测...通过以上步骤,Android应用能够实现自动检测服务器上的版本更新,下载并提示用户安装新版本,从而保持应用的最新状态。这不仅提高了用户体验,也有助于开发者及时推送修复和新特性。

    android版本自动更新

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

    Android-版本检测自动更新.zip

    Android-版本检测自动更新.zip

    安卓Android源码——版本检测自动更新.zip

    这个压缩包“安卓Android源码——版本检测自动更新.zip”很可能包含了一个实现这一功能的示例代码或库。下面我们将深入探讨相关的知识点。 1. **版本检测**:版本检测通常通过向服务器发送一个请求来完成,询问是否...

    Android应用源码版本检测自动更新.zip

    本资源“Android应用源码版本检测自动更新.zip”包含了一套完整的源码实现,帮助开发者理解如何在Android应用中集成这一功能。以下是关于这个主题的详细解释: 1. **版本检测**:版本检测通常通过网络请求实现,...

    Android-版本检测自动更新(源码).zip

    Android-版本检测自动更新(源码).zip

    基于Android的版本检测自动更新.zip

    这个名为"基于Android的版本检测自动更新.zip"的压缩包文件,显然是一个教学资源,旨在帮助初学者或者毕业生了解如何在Android应用程序中实现这一功能。我们可以从以下几个方面来深入探讨这个知识点: 1. **版本...

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

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

    android自动检测版本并更新下载,带进度条服务端解析xml

    在Android应用开发中,定期检查并自动更新应用程序是提高用户体验和确保软件安全的重要一环。本项目关注的是如何实现这样一个功能,即“android自动检测版本并更新下载,带进度条服务端解析xml”。这个功能涉及到...

    android客户端自动检测更新

    在Android应用开发中,实现客户端自动检测更新的功能是一项常见的需求,可以提高用户体验并确保用户始终运行的是最新版本的软件。以下是对标题、描述和标签所涉及知识点的详细说明: 1. **Android 客户端自动检测...

    版本检测自动更新_Android.rar

    这个压缩包文件"版本检测自动更新_Android.rar"很可能包含了实现这一功能的相关代码、配置文件和资源。以下是对这一主题的详细说明: 1. **版本检测**:版本检测通常涉及到服务器端和客户端的交互。服务器端存储着...

    android7 以上版本自动更新app

    实现 android7、8 以上版本自动更新app 程序,仅供参考。

    Android应用源码版本检测自动更新-IT计算机-毕业设计.zip

    这个项目为学习Android应用开发提供了实践平台,通过实现版本检测和自动更新功能,学生可以深入理解Android的网络编程、文件操作、用户界面设计、多线程和权限管理等多个核心知识点。同时,它也提醒我们,良好的用户...

    安卓Android源码——版本检测自动更新.rar

    这个压缩包文件"安卓Android源码——版本检测自动更新.rar"很可能是包含了实现这一功能的源代码。下面将详细介绍这个过程中的关键知识点。 1. **版本检测**: - **服务器端**:通常,应用会连接到一个服务器,该...

    android 程序自动检测更新

    9. **错误处理**:在设计自动更新功能时,还需要考虑网络异常、服务器响应错误等情况,确保应用在遇到问题时能适当地通知用户或重试。 总的来说,实现Android应用的自动检测更新功能需要综合运用网络编程、数据解析...

    版本检测自动更新.zip

    这个"版本检测自动更新.zip"文件可能包含一个实现这一功能的示例代码或工具集。下面,我们将深入探讨这个主题,了解如何在Android应用程序中实现版本检测和自动更新。 1. **版本检测**:在Android应用中,版本检测...

Global site tag (gtag.js) - Google Analytics