`

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版本转场动画

    本文将深入探讨Android版本转场动画的相关知识点,包括基本概念、使用方法以及Canvas和Timer在动画中的应用。 一、转场动画基础 1.1 动画类型:Android提供了多种类型的动画,包括帧动画(AnimationDrawable)、补...

    androidmk 转换Android.bp工具方法

    随着Android Gradle Plugin的更新,从旧的`Android.mk`文件(Makefile系统)过渡到新的`Android.bp`文件( Blueprint语言)已经成为趋势。`Android.bp`提供了更为灵活和强大的模块定义方式,支持更高级别的抽象和...

    Android 增量更新差分包

    在Android应用开发中,为了提供更高效的更新方式,开发者常常会使用增量更新技术。增量更新是一种只下载应用中改变部分的更新方式,相比于传统的全量更新,它显著减少了用户下载的数据量,提升了用户体验。本文将...

    Android和Linux内核版本对应关系

    #### 二、Android版本与Linux Kernel版本对应关系 ##### 1. Astro (铁臂阿童木) - **Android系统版本**: Beta - **发布时间**: 2007年11月5日 - **Linux Kernel内核版本**: 未知 - **备注**: 作为面向开发者的软件...

    PL2303-USB转串口驱动程序(Android版本)

    10. **软件生命周期管理**:驱动程序的维护同样重要,包括版本控制、更新发布和bug修复,以适应新的Android版本和硬件平台。 总结来说,PL2303 USB转串口驱动程序在Android设备上的应用涉及到多个层面的技术,包括...

    android sdk27版本

    在本场景中,我们关注的是Android SDK的27版本,这对应于Android操作系统8.1.0,也称为Oreo。这个版本的SDK对开发者来说至关重要,因为它包含了构建针对Android 8.1应用所必需的组件。 首先,Android SDK Platform...

    android-26 对应android8

    记得在Android Studio中更新构建目标和最低支持版本,以确保应用能够在Android 8.0及更高版本上正常运行。同时,由于标签中提到了“java apache”,开发者可能还需要关注如何在Android 8.0环境中使用Apache相关的库...

    AndroidKiller 1.3.1 2021更新版

    AndroidKiller 1.3.1 2021更新版, 更新apktools2.5.1 更新dex2jar版本, 更新jd-gui1.6.6 ,自动将多个dex转成jar, 解决反编译工程卡死问题.

    Android7.0版本升级安装

    1. 检查兼容性:确保设备型号支持Android 7.0更新,并且当前系统版本可以升级。 2. 备份数据:在升级前,建议备份重要数据,以防意外丢失。 3. 下载更新:通过官方渠道获取更新文件,例如通过设置中的“系统更新”...

    android 仿音量旋转按钮

    - 在多种设备和Android版本上进行测试,确保兼容性和性能。 - 根据用户反馈和性能分析结果进行优化,比如提高响应速度、减少资源消耗等。 综上所述,“android 仿音量旋转按钮”的实现涉及到Android自定义View的...

    android2.3 文字转语音 4.0不可用

    总之,"android2.3 文字转语音 4.0不可用"这个问题可能涉及Android版本之间的兼容性、特定设备的TTS引擎以及开发者如何在应用中正确集成和使用TTS服务。解决这类问题通常需要结合设备特定的更新、代码调整和用户端的...

    android简单旋转菜单

    在这个案例中,我们将使用视图动画,因为它更简单且适用于早期版本的Android系统。视图动画包括补间动画(Tween Animation)和帧动画(Frame Animation),其中补间动画常用于实现旋转、移动、缩放和透明度变化等...

    Android版本的圆形旋转菜单

    "Android版本的圆形旋转菜单"就是一个很好的示例,它提供了一种新颖且有趣的交互方式。这种菜单以圆形布局呈现,通过旋转动作来展开或收起选项,既美观又实用。下面我们将深入探讨这个菜单的实现方式以及相关技术点...

    Android数据库框架-----GreenDao3的相关使用和版本升级更新

    本文将深入探讨GreenDao3的相关使用以及如何进行版本升级更新。 **一、GreenDao简介** GreenDao是一个强大的库,它允许开发者通过简单的Java对象(POJOs)与SQLite数据库进行交互。它的核心特性包括: 1. **快速...

    android增量更新

    增量更新是Android应用开发中一种高效且节省流量的更新方式,尤其在移动网络环境不稳定或者数据流量有限的情况下显得尤为重要。这种技术的核心理念是通过对比已安装应用的旧版本与服务器上的新版本,找出两者的差异...

    android 数据库表结构更新步骤

    下面将详细讲解如何在Android中进行数据库表结构的更新,以及如何处理旧版本程序中表的接口添加、删减字段的问题。 1. **创建SQLite数据库** - Android使用SQLite作为默认的本地数据库系统。首先,我们需要创建一...

    Android8.0 APP更新

    在Android 8.0系统中,应用程序的更新和文件分享是两个重要的功能,它们涉及到用户交互、系统安全以及用户体验等多个方面。以下将详细介绍这两个知识点。 首先,我们来谈谈"Android 8.0 APP更新"。Android 8.0,又...

    Android自定义动画 3D旋转

    在实际开发中,为了支持低版本Android系统,我们通常会使用Support Library中的android.support.v4.animation库来实现属性动画。同时,考虑到性能和流畅性,需要注意控制动画的执行时间和帧率,避免过度复杂的动画...

    android数据库Realm版本更新

    本篇将深入探讨“Android数据库Realm版本更新”的主题,包括 Realm 的基本操作,如增删改查,以及如何在版本更新时进行数据迁移。 首先,让我们了解 Realm 的基础操作。Realm 提供了简洁的 API 来执行常见的数据库...

    android平台中MP3转wavDemo

    这个自己写的一个android 平台下移植ffmpeg项目完成的一个小的功能。ffmpeg版本0.8.8。将MP3转码为wav格式,转换前可设置要转换的采样率,并实时更新转换的进度。运行前请在sd卡下建立一个test文件夹,将要转化的MP3...

Global site tag (gtag.js) - Google Analytics