zoukankan      html  css  js  c++  java
  • 手机安全卫士开发系列(5)——自动更新

    新建一个MainActivity

    package com.meritit.mobiesafe.ui;
    
    import com.meritit.mobiesafe.R;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class MainActivity extends Activity {
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		this.setContentView(R.layout.main);
    	}
    }
    


    配置mainfest文件

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.meritit.mobiesafe"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
        <instrumentation
            android:name="android.test.InstrumentationTestRunner"
            android:targetPackage="com.meritit.mobiesafe" />
        <uses-permission android:name="android.permission.INTERNET"/>
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" 
            >
            <uses-library android:name="android.test.runner" />
            <activity
                android:name=".ui.SplashActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity 
                android:name=".ui.MainActivity"
                android:label="@string/main_screen"></activity>
        </application>
    
    </manifest>
    

    新建一个DownLoadFileTask类用于下载文件

    package com.meritit.mobiesafe.engine;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import android.app.ProgressDialog;
    
    public class DownLoadFileTask {
    	
    	/**
    	 * 
    	 * @param path 服务器文件路径
    	 * @param filepath 本地文件路径 
    	 * @return 本地文件对象
    	 * @throws Exception
    	 */
    	public static File getFile(String path,String filepath,ProgressDialog pd) throws Exception{
    		URL url = new URL(path);
    		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    		conn.setRequestMethod("GET");
    		conn.setConnectTimeout(5000);
    		if(conn.getResponseCode() == 200){
    			int total =  conn.getContentLength();
    			pd.setMax(total);
    			InputStream is = conn.getInputStream();
    			File file = new File(filepath);
    			FileOutputStream fos = new FileOutputStream(file);
    			byte[] buffer = new byte[1024];
    			int len = 0;
    			int process = 0;
    			while((len = is.read(buffer))!=-1){
    				fos.write(buffer, 0, len);
    				process +=len;
    				pd.setProgress(process);
    				Thread.sleep(50);
    			}
    			fos.flush();
    			fos.close();
    			is.close();
    			
    			return file;
    		}
    		return null;
    	}
    }
    


    开启一个线程下载文件

    	private class DownLoadFileThreadTask implements Runnable {
    		private String path; // 服务器路径
    		private String filepath; // 本地文件路径
    
    		public DownLoadFileThreadTask(String path, String filepath) {
    			this.path = path;
    			this.filepath = filepath;
    		}
    
    		public void run() {
    			try {
    				File file = DownLoadFileTask.getFile(path, filepath,pd);
    				Log.i(TAG,"下载成功");
    				pd.dismiss();
    				install(file);
    			} catch (Exception e) {
    				e.printStackTrace();
    				Toast.makeText(getApplicationContext(), "下载文件失败", 0).show();
    				pd.dismiss();
    				loadMainUI();
    				
    			}
    
    		}
    
    	}


    自动安装apk文件

    	/**
    	 * 安装apk
    	 * @param file
    	 */
    	private void install(File file){
    		Intent intent = new Intent();
    		intent.setAction(Intent.ACTION_VIEW);
    		intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
    		finish();
    		startActivity(intent);
    	}


    新启一个线程用来延时两秒中(这样就可以看到闪屏界面)

    		new Thread(){
    			public void run() {
    				super.run();
    				try {
    					sleep(2000);
    					handler.sendEmptyMessage(0);
    				} catch (InterruptedException e) {
    					
    					e.printStackTrace();
    				}
    				
    			};
    		}.start();


    延时后通知主线程开始下面的事

    	private Handler handler = new Handler(){
    		public void handleMessage(android.os.Message msg) {
    			super.handleMessage(msg);
    			//判读服务器的版本号和客户端的版本号是否相同 
    			if(isNeedUpdate(versiontext)){
    				Log.i(TAG, "弹出升级对话框");
    				showUpdateDialog();
    			}
    		};
    	};


    资源下载:http://download.csdn.net/detail/lxq_xsyu/5989881

  • 相关阅读:
    SAP 盘盈盘亏移动类型701&702 Vs 711&712
    SAP MM里的ERS功能不适用于供应商寄售采购模式
    Docker overlay2占用大量磁盘空间解决办法
    pytorch 文本多分类
    Python调试输出变量一部分变成了省略号
    Python sklearn.externals中的joblib导入失败
    Python:SyntaxError:(unicode error) 'unicodeescape' codec can't decode bytes in pos
    dotnetCampus.UITest.WPF 一个支持中文用例的界面单元测试框架
    Introduction to Robotics Toolbox
    CUDA application design and development
  • 原文地址:https://www.cnblogs.com/pangblog/p/3275430.html
Copyright © 2011-2022 走看看