`

android > APK更新

 
阅读更多

package t1.com;



import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;

import org.apache.http.client.HttpClient;



import android.R.anim;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class T1Activity extends Activity {
    protected static final int UPDATA_CLIENT = 0;
	protected static final int CHECK_UPDATE = 1;
	protected static final int DOWN_ERROR = 0;
	/** Called when the activity is first created. */
    private int globalVersion = 3;
    private int serverVersion;
    private String serverVersionUrl = "http://cloud.broadlink.com.cn/2/switch_version.html";
    private String downLoadApkUrl = "http://cloud.broadlink.com.cn/2/t1.apk";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
		  


       ////检测更新-------------------------
       new Thread(new Runnable() { 
            	public void run() { 
            			try {
							serverVersion = 33;
		                    Message msg = new Message();  
		                    msg.what = CHECK_UPDATE;  
		                    handler.sendMessage(msg);  
							
						} catch (NumberFormatException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
    	        		
    				
            	 
            	} 
       }).start(); 
        
        
    } 
    
    
    
    public void showUpdateDialog() {

    	@SuppressWarnings("unused")

    	AlertDialog alert = new AlertDialog.Builder(T1Activity.this).setTitle("更新提示")
    	.setIcon(android.R.drawable.ic_dialog_info).setMessage("检测到新的版本,请下载更新").setPositiveButton("下载",new DialogInterface.OnClickListener() {

    	public void onClick(DialogInterface dialog,int which) {
    		dialog.dismiss();  //关闭对话框  
    		downLoadApk(); 
	    	System.out.println("start update");

    	}

    	}).show();

    }
    
    protected void downLoadApk() {  
        final ProgressDialog pd;    //进度条对话框  
        pd = new  ProgressDialog(this);  
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
        pd.setMessage("正在下载更新");  
        pd.show();  
        new Thread(){  
            @Override  
            public void run() {  
                try {  
                    File file = getFileFromServer(downLoadApkUrl, pd);  
                    sleep(3000);  
                    installApk(file);  
                    pd.dismiss(); //结束掉进度条对话框  
                } catch (Exception e) {  
                	pd.dismiss();
                    Message msg = new Message();  
                    msg.what = DOWN_ERROR;  
                    handler.sendMessage(msg);  
                    e.printStackTrace();  
                }  
            }}.start();  
    }  
    public static File getFileFromServer(String path, ProgressDialog pd) throws Exception{  
        //如果相等的话表示当前的sdcard挂载在手机上并且是可用的  
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){  
            URL url = new URL(path);  
            HttpURLConnection conn =  (HttpURLConnection) url.openConnection();  
            conn.setConnectTimeout(5000);  
            //获取到文件的大小   
            pd.setMax(conn.getContentLength());  
            InputStream is = conn.getInputStream();  
            File file = new File(Environment.getExternalStorageDirectory(), "updata.apk");  
            FileOutputStream fos = new FileOutputStream(file);  
            BufferedInputStream bis = new BufferedInputStream(is);  
            byte[] buffer = new byte[1024];  
            int len ;  
            int total=0;  
            while((len =bis.read(buffer))!=-1){  
                fos.write(buffer, 0, len);  
                total+= len;  
                //获取当前下载量  
                pd.setProgress(total);  
            }  
            fos.close();  
            bis.close();  
            is.close();  
            return file;  
        }  
        else{  
            return null;  
        }  
    } 
  //安装apk   
    protected void installApk(File file) {  
        Intent intent = new Intent();  
        //执行动作  
        intent.setAction(Intent.ACTION_VIEW);  
        //执行的数据类型  
        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");  
        startActivity(intent);  
    } 
    
    Handler handler = new Handler(){  
        
        @Override  
        public void handleMessage(Message msg) {  
            // TODO Auto-generated method stub  
            super.handleMessage(msg);  
            switch (msg.what) {   
            case DOWN_ERROR:  
                //下载apk失败  
                Toast.makeText(getApplicationContext(), "下载新版本失败", 1).show();  
                break;    
            case CHECK_UPDATE:  
                //下载apk失败  
            	 
                
                if(serverVersion == 0) {
                	serverVersion = globalVersion;
                }
                
                if(serverVersion != globalVersion){
                	showUpdateDialog();	
                } 
                break; 
            }  
        }  
    }; 
    
}
 
分享到:
评论

相关推荐

    微信签名工具Android 安装包(Gen-Signature-android.apk)

    微信签名工具,即`Gen-Signature-android.apk`,是一个专为开发者设计的工具,用于生成和管理Android应用的签名文件。这个工具可以帮助开发者对他们的APK进行签名,以确保其能够在用户的设备上正常安装和运行。由于...

    Android apk更新安装代码

    本篇文章将详细介绍如何在Android应用中实现APK的自动更新安装功能。 首先,我们需要理解Android系统如何处理APK的安装过程。当用户下载一个APK文件后,系统默认的行为是通过点击文件或使用“安装未知应用”权限来...

    apk.rar_.apk_android_android apk_apk

    标题中的"apk.rar_.apk_android_android apk_apk"暗示了我们正在讨论的是一个与Android操作系统相关的APK文件,它被压缩在名为"apk.rar"的RAR格式文件中。APK是Android应用程序的主要文件格式,它包含了应用的所有...

    android-APK自动更新.rar

    本文将深入探讨“android-APK自动更新.rar”这一资源中涉及的关键技术点,包括如何在Android 10.0和9.0系统上实现APK的自动更新,以及自动获取权限的相关策略。 一、Android APK自动更新机制 1. Google Play服务的...

    android10 apk签名文件

    在Android系统中,APK签名是一个至关重要的过程,它确保了应用的完整性和开发者身份的验证。在Android 10中,这个过程没有本质的变化,但随着系统的更新,签名文件的作用和安全要求更加严格。本篇文章将深入探讨...

    android10288.apk

    android10288.apk

    iperf_android.apk.zip

    `iperf_android.apk` 是专为Android设备优化的iPerf3版本,用户可以通过安装此APK在手机或平板上进行网络性能测试。以下是一些应用场景: 1. **网络诊断**:当用户感觉网络慢或者不稳定时,可以用iPerf3测试并定位...

    Android设备做服务器更新另一台Android的apk

    在Android平台上,将一台设备作为服务器来为另一台设备提供apk更新是一种常见的远程部署应用程序的方法。这种方法主要利用了网络通信技术,尤其是TCP/IP协议中的Socket编程,以实现两台Android设备之间的数据传输。...

    Android一个apk启动另外一个apk

    在Android平台上,一个APK应用启动另一个APK应用是一个常见的需求,这可能涉及到应用之间的交互、服务调用或者用户引导到不同的应用体验。这个过程主要依赖于Android的Intent机制,Intent是Android系统中用于组件间...

    android ping apk

    android ping apkandroid ping apkandroid ping apkandroid ping apkandroid ping apk

    Android 获取apk声明的权限列表

    在Android系统中,每个应用程序(apk)都有特定的权限声明,这些权限决定了应用程序可以执行哪些操作。本篇文章将深入探讨如何获取Android APK文件声明的权限列表,这对于开发者进行应用审计、安全分析或用户理解...

    rknn-yolov5-android-apk-demo

    rknn_yolov5_android_apk_demo

    Android apk 强制更新 实现断点续传

    在Android应用开发中,为了确保用户始终使用最新版本并获得最佳体验,开发者有时需要实现强制更新功能。本文将深入探讨如何在Android应用中实现在弹出对话框中强制用户更新,并且支持断点续传技术,提高下载效率。 ...

    android模拟器安装APK文件

    2. 在项目结构中,找到`app > build > outputs > apk`目录,这里包含你的APK文件。 3. 右键点击APK文件,选择"Show in Explorer",将其在文件管理器中打开。 4. 复制APK文件到剪贴板或者直接拖放到模拟器屏幕上,...

    Android 更新下载apk 安装apk 打开apk

    在Android平台上,更新、下载、安装以及打开APK文件是应用程序生命周期中的常见操作。下面将详细阐述这些过程及其相关的知识点。 一、Android APK文件 APK(Android Package)是Android系统中应用程序的安装包,...

    用于unity Android 平台做apk自动更新Jar包.zip

    标题提到的"用于unity Android 平台做apk自动更新Jar包.zip"正是为了解决这一需求,它包含了一些关键的库文件,帮助开发者在Unity中构建apk的自动更新机制。 首先,我们来详细了解这两个重要的库文件: 1. **...

    android 版本更新 APK 下载 安装

    本教程将详细解释如何进行Android版本更新,包括下载新版本的APK文件以及如何在设备上安装。 一、APK 文件及其作用 APK 文件是一个包含所有必要组件的压缩包,包括代码、资源、库和应用程序的清单文件。当用户在...

    android应用下载安装apk升级版本实现demo适配Android10

    5. **安装APK**:在Android 10及以上版本,由于默认禁止了非Google Play商店的安装,需要在AndroidManifest.xml中添加`<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />`权限。...

    android安装apk位置选择

    android安装apk位置选择

    Android_apk打包签名

    而在IntelliJ IDEA中,签名APK的步骤类似,路径通常是:菜单 Tools -> Android -> Export Signed APK。 签名完成后,为了提升APK的性能,还需要进行zipalign优化。zipalign是Android SDK的一部分,位于`android-sdk...

Global site tag (gtag.js) - Google Analytics