android apk更新

一,檢測是否需要更新

1-1,檢查當前的網絡狀態

1-2,獲取當前版本信息

1-3,檢測是否具有新版本,用戶選擇是否跟新

二,下載最新apk

2-1,下載最新版本的apk

三,啓動更新

3-1,啓動更新


1-1,檢查當前的網絡狀態:

    /**
     * 獲取網絡類型
     *
     * @param context Context
     * @return 網絡類型
     * @see [類、類#方法、類#成員]
     */
    public static int getNetworkType(Context context) {

        NetworkInfo networkInfo = getConnectedNetworkInfo(context);
        if (networkInfo != null) {
            return networkInfo.getType();
        }

        return -1;
    }

    public static NetworkInfo getConnectedNetworkInfo(Context context) {
        try {
            ConnectivityManager connectivity = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity == null) {
                Log.i(tag, "couldn't get connectivity manager");
            } else {
                NetworkInfo[] info = connectivity.getAllNetworkInfo();
                if (info != null) {
                    for (int i = 0; i < info.length; i++) {
                        if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                            return info[i];
                        }
                    }
                }
            }

        } catch (Exception e) {
            Log.i(tag, e.getMessage());
        }
        return null;
    }

1-2,獲取當前版本信息

    public void check(View view){
        PackageManager manager = getPackageManager();
        PackageInfo info = null;
        try {
             info = manager.getPackageInfo("com.wang.demo_android", 0);
        } catch (NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        tv_show.setText("versionCode:"+ info.versionCode +"; versionName:"+ info.versionName);
    }

1-3,檢測是否具有新版本,用戶選擇是否跟新(一般的請求網絡,彈窗就好)



2-1,下載最新版本的apk,使用android 系統自帶的DownloadManager

        mDownloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

        // 設置下載的網絡地址:url
        Uri uri = Uri
                .parse("http://gdown.baidu.com/data/wisegame/fd84b7f6746f0b18/baiduyinyue_4802.apk");
        DownloadManager.Request down = new DownloadManager.Request(uri);

        // 設置允許下載的網絡類型
        down.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE
                | DownloadManager.Request.NETWORK_WIFI);

        // 下載途中通知欄的顯示
        down.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
        // 下載界面的顯示
        down.setVisibleInDownloadsUi(true);
        // 設置下載後文件的存放路徑
        down.setDestinationInExternalFilesDir(getApplicationContext(),
                Environment.DIRECTORY_DOWNLOADS, "baidumusic.apk");

        // 添加到任務隊列
        mDownloadManager.enqueue(down);

3-1,下載完成之後(使用廣播接收器),啓動更新

廣播接收:

    class DownloadUpdateCompleteReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            //安裝apk
            if(DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(intent.getAction())){
                Log.i(tag, "onReceive");
                //獲得下載文件的Id
                long apkId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
                Uri apkUri = mDownloadManager.getUriForDownloadedFile(apkId);
                //自動安裝apk
                installApk(apkUri);
                UpdateService.this.stopSelf();
            }
        }

    }

註冊:

registerReceiver(mDownloadUpdateCompleteReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

啓動安裝:

    private void installApk(Uri apkUri) {
        //通過Intent安裝apk
        Log.i(tag, "uri-2->"+apkUri.getPath());
        Intent intent = new Intent();
        intent.setAction(android.content.Intent.ACTION_VIEW);
        intent.addCategory(android.content.Intent.CATEGORY_DEFAULT);
        intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        try {
            getApplicationContext().startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.i(tag, "installApk");
    }

推薦:http://www.cnblogs.com/wainiwann/archive/2012/03/12/2391810.html






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章