`
iaiai
  • 浏览: 2196156 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android下载类DownloadManager

 
阅读更多
SDK在API Level 9中加入了DownloadManager服务,可以将长时间的下载任务交给系统,完全由系统管理。

直接看实例代码:
import java.io.File;

import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;

import com.quma.core.Attribute;
import com.quma.db.DaoManager;
import com.quma.db.DatabaseOpenHelper;
import com.quma.db.DatabaseOpenHelper.WritableHandler;
import com.quma.db.entity.Upgrade;
import com.quma.webservice.ServiceManager;
import com.quma.webservice.constants.UpgradeStatus;

/**
 * 
 * @company qq:176291935
 * @author iaiai
 * @version
 * @date 2015-5-27 下午12:15:41
 */
public class UpgradeService extends Service {
	
	private File updateDir;	//目录
	
	private File updateFile;	//文件
	
	private String fileName;	//文件名
	
	/** 安卓系统下载类 **/  
    DownloadManager manager;  
  
    /** 接收下载完的广播 **/  
    DownloadCompleteReceiver receiver;  
  
    /** 初始化下载器 **/  
    private void initDownManager() {  
        manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);  
        receiver = new DownloadCompleteReceiver();  
  
        //设置下载地址  
        DownloadManager.Request down = new DownloadManager.Request(Uri.parse("http://www.xxx.com/xx.apk"));  
          
        // 设置允许使用的网络类型,这里是移动网络和wifi都可以  
        down.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);  
          
        // 下载时,通知栏显示途中  
//        down.setNotificationVisibility(Request.VISIBILITY_VISIBLE); 
        down.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);  
          
        // 显示下载界面  
        down.setVisibleInDownloadsUi(true);  
        
        // 设置下载后文件存放的位置  
        down.setDestinationUri(Uri.fromFile(updateFile));

        down.setTitle("趣马养车");
        down.setDescription("下载更新");
          
        // 将下载请求放入队列  
        manager.enqueue(down);  
          
        //注册下载广播  
        registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));  
    }
    
    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {
    	//创建文件
	    if(android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState())){
	        updateDir = new File("/sdcard/download");
	        fileName = "temp.apk";
	        updateFile = new File(updateDir.getPath(),fileName);
	    }
    	
        // 调用下载  
        initDownManager();  
          
        return START_NOT_STICKY;  
    }  
  
    @Override  
    public IBinder onBind(Intent intent) {  
        return null;  
    }  
  
    @Override  
    public void onDestroy() {  
        // 注销下载广播  
        if (receiver != null)  
            unregisterReceiver(receiver);  
          
        super.onDestroy();  
    }  
  
    // 接受下载完成后的intent  
    private class DownloadCompleteReceiver extends BroadcastReceiver {  
        @Override  
        public void onReceive(Context context, Intent intent) {  
            //判断是否下载完成的广播
            if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
            	DatabaseOpenHelper.writableDatabase(UpgradeService.this, new WritableHandler() {
					@Override
					public void exec(SQLiteDatabase db) {
						Upgrade upgrade = DaoManager.getUpgradeDao().query(db, appid);
						if(upgrade!=null){
							upgrade.setStatus(UpgradeStatus.下载完成.getVal());
							DaoManager.getUpgradeDao().update(db, upgrade);
						}
					}
				});
            	
                //获取下载的文件id  
                long downId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);  
                
                //自动安装apk
                installAPK(manager.getUriForDownloadedFile(downId));  
                
                //停止服务并关闭广播  
                UpgradeService.this.stopSelf();  
            }  
        }  
  
        /** 
         * 安装apk文件 
         */  
        private void installAPK(Uri apk) {
            // 通过Intent安装APK文件  
            Intent intents = new Intent();  
            
            intents.setAction("android.intent.action.VIEW");  
            intents.addCategory("android.intent.category.DEFAULT");  
            intents.setType("application/vnd.android.package-archive");
            intents.setData(apk);
            intents.setDataAndType(apk,"application/vnd.android.package-archive");  
            intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
//            android.os.Process.killProcess(android.os.Process.myPid());
            // 如果不加上这句的话在apk安装完成之后点击单开会崩溃  
            startActivity(intents);  
        }  
  
    }

}

分享到:
评论

相关推荐

    android中DownloadManager实现版本更新,监听下载进度实例

    需要注意的是,使用DownloadManager下载文件时,需要在Android应用的Manifest文件中添加网络通信权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` 最后,效果图展示了整个下载...

    Android-使用DownloadManager下载完apk自动提示安装的功能

    在Android应用开发中,有时我们需要实现一个功能,即使用系统内置的`DownloadManager`服务来下载APK文件,并在下载完成后自动提示用户进行安装。这个功能对于应用的更新或者安装外部资源非常实用。本文将详细讲解...

    android自带下载工具DownloadManager示例demo

    在Android系统中,内置了一个强大的下载管理器——DownloadManager,它是Android SDK的一部分,允许开发者方便地实现后台下载任务,无需用户手动操作。本示例将详细介绍如何使用DownloadManager进行文件下载,并提供...

    android 文件下载DownloadManager

    在Android系统中,`DownloadManager` 是一个系统服务,用于管理设备上的文件下载任务。它为应用程序提供了一种安全、可靠且后台运行的文件下载方式,使得用户可以在应用不活动时或者设备屏幕关闭的情况下继续下载。`...

    Android DownloadManager和自定义下载功能

    Android系统自带了一个名为DownloadManager的服务,它为开发者提供了便捷的方式来管理和执行文件下载。本文将深入探讨Android DownloadManager以及如何自定义下载功能。 **Android DownloadManager** 1. **...

    android系统DownloadManager下载工具类

    在Android系统中,DownloadManager是一个系统级别的服务,用于在后台管理文件下载。它提供了一种安全、可靠且方便的方式来下载大文件,即使在设备重启或网络连接中断后也能继续下载。这个工具类允许开发者轻松地集成...

    Android studio 使用自带DownloadManager实现更新app

    Android Studio提供了一个内置的`DownloadManager`服务,使得开发者能够方便地实现应用的自动更新功能。本文将深入探讨如何利用`DownloadManager`来创建一个简单的、可靠的文件下载系统,以实现app的自动更新。 ...

    android DownloadManager示例

    DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager....DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息,这两个类的具体功能会在后面穿插介绍。

    android使用DownloadManager自动更新,安装apk

    `DownloadManager`是Android系统服务之一,它负责在后台下载文件,特别适合处理大文件,如APK更新包。这个服务具有以下优点: 1. **后台下载**:即使用户关闭了应用,下载任务也会继续。 2. **断点续传**:如果下载...

    android DownloadManager

    `DownloadManager` 是 Android API Level 9(即Android 2.3 Gingerbread)引入的一个类,位于`android.app`包下。它为开发者提供了一个方便的接口来发起下载任务,并可以监控这些任务的状态。`DownloadManager`会...

    Android使用DownloadManager实现版本更新

    Android系统提供了一个内置的`DownloadManager`类,它允许开发者在后台下载大文件,如应用的新版本APK,而无需用户手动干预。本篇文章将深入探讨如何利用`DownloadManager`来实现自动版本更新。 首先,我们需要了解...

    Android版本更新使用DownloadManager.

    在Android系统中,DownloadManager是系统提供的一个服务,用于在后台下载大文件,如应用程序的更新包。这个服务是异步的,可以在用户离开应用后继续下载,而且它还提供了断点续传、网络状况检查等功能,使得在移动...

    Android DownLoadManager小例子

    在Android平台上,`DownloadManager`是一个系统服务,用于在后台管理大文件的下载任务,尤其适合在用户不直接交互的情况下进行。本示例将重点介绍如何利用`DownloadManager.Request`方法来实现文件下载,并在通知栏...

    使用DownLoadManager实现Android文件下载功能(烟台杰瑞教育原创)

    在Android开发中,`DownloadManager`是一个系统服务,用于在后台执行大文件的下载任务,尤其适合长时间运行的、非用户交互式的下载操作。本文将详细介绍如何利用`DownloadManager`来实现Android应用的文件下载功能。...

    android 使用download Manager实现应用下载安装

    在Android系统中,`DownloadManager` 是一个系统服务,用于管理大文件的后台下载任务,尤其适用于应用程序的下载和安装。这个服务不仅提供了方便的API,还能处理网络连接的恢复、断点续传以及自动设置通知等。在这个...

    DownloadManager框架实战源码

    创建下载请求是通过`DownloadManager.Request`类实现的。需要指定下载的URL、保存到本地的文件路径、请求的优先级、是否允许在移动网络下下载等参数。 3. **提交下载任务** 使用`DownloadManager.enqueue(Request...

    Android代码-Android-Download-Manager-Pro

    Android-Download-Manager Android/Java download manager library help you to download files in parallel mechanism in some chunks. Overview This library is a download manager android/java library which ...

    Android-Updater基于DownloadManager封装的更新器

    `DownloadManager`是Android系统提供的一个用于在后台下载文件的系统服务,它能够处理网络中断、设备重启等复杂情况,确保文件下载的可靠性。`Android-Updater`则是在`DownloadManager`的基础上进行了一层封装,提供...

    安卓SD卡文件管理更新信息相关-DownloadManager(强制升级与自选升级.rar

    对于应用程序,特别是涉及到下载管理和更新的,DownloadManager类扮演着核心角色。在"安卓SD卡文件管理更新信息相关-DownloadManager(强制升级与自选升级.rar"这个压缩包中,可能包含了关于如何利用DownloadManager...

Global site tag (gtag.js) - Google Analytics