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

一个使用DownloadManager下载文件的小例子

 
阅读更多

最近自己在写个小项目,需要从服务器下载文件,之前也写过下载文件的代码,都是采用传统的方式,既使用HttpClient来下载,但是需要自己处理很多异常,觉得甚是麻烦,后来发现android2.3里面提供了DownloadManager服务,那为何不拿来用了?于是有了下面的小例子:

 


代码如下:

 

 

public class ApkClientActivity extends Activity {
    static final String TAG = "ApkClientActivity";
    Context mContext;
    DownloadManager manager ;
    DownloadCompleteReceiver receiver;
    Button downBtn ;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mContext = this;
        //获取下载服务
        manager =(DownloadManager)getSystemService(DOWNLOAD_SERVICE);
        receiver = new DownloadCompleteReceiver();
        downBtn = (Button)findViewById(R.id.downBtn);
        downBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建下载请求
                DownloadManager.Request down=new DownloadManager.Request (Uri.parse("http://192.168.0.66:8080/qqinput.apk"));
                //设置允许使用的网络类型,这里是移动网络和wifi都可以
                down.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
                //禁止发出通知,既后台下载
                down.setShowRunningNotification(false);
                //不显示下载界面
                down.setVisibleInDownloadsUi(false);
                //设置下载后文件存放的位置
                down.setDestinationInExternalFilesDir(mContext, null, "qqinput.apk");
                //将下载请求放入队列
                manager.enqueue(down);
            }
        });
    }
    //接受下载完成后的intent
    class DownloadCompleteReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)){
                long downId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
                Log.v(TAG," download complete! id : "+downId);
                Toast.makeText(context, intent.getAction()+"id : "+downId, Toast.LENGTH_SHORT).show();
            }
        }
    }
    
    @Override
    protected void onResume() {
        registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
        super.onResume();
    }
    
    @Override
    protected void onDestroy() {
        if(receiver != null)unregisterReceiver(receiver);
        super.onDestroy();
    }
}

 

其中在设置 down.setShowRunningNotification(false);时,需要添加相应的权限:

<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />

否则,会报错!

 

AndroidManifest.xml文件内容如下:

 

<uses-sdk android:minSdkVersion="9" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".ApkClientActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
	<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />

 

因为这个DownloadManager是android2.3才提供的,所以minSdkVersion = 9

 

还有更多的用法,等待后面去发现!

  • 大小: 14.5 KB
3
0
分享到:
评论
3 楼 347932666 2012-03-03  
     
2 楼 aswang 2012-02-27  
jstl1point0 写道
限制了SDK的版本,没用



是的,这个只能在2.3及以上版本使用。但是,可以把它的源码拿过来阅读,进行改写实现自己的下载。

另外对于内置于系统的应用,还是可以使用这个DownloadProvider的。
1 楼 jstl1point0 2012-02-27  
限制了SDK的版本,没用

相关推荐

    Android DownLoadManager小例子

    通过以上步骤,我们就使用`DownloadManager`成功地创建了一个文件下载任务,并在通知栏显示了下载进度。在实际应用中,还可以根据需要设置更多的参数,如限制下载速度、设置优先级等。同时,注意处理可能的异常情况...

    DownloadManager

    在Android系统中,`DownloadManager`是一个用于管理设备上的文件下载的系统服务。它提供了一种方便、可靠的方式来异步下载文件,并且可以处理网络中断、电源问题等,确保下载的完整性。本示例旨在展示如何使用`...

    DownloadManager下载QQ.apk 例子        

    DownloadManager是一个可以处理长时间运行的HTTP下载的系统服务,客户端请求一个URL地址去下载一个目标文件, 下载管理器将在后台进行下载,处理HTTP交互,并在失败或连接更改和系统重新启动后重试下载。

    演示Android下载文件的例子

    对于大型文件或需要后台下载、断点续传的情况,建议使用`DownloadManager`。它是一个系统服务,可以处理文件的下载,并提供通知、错误处理等功能。以下是如何使用`DownloadManager`的基本步骤: ```java // 获取...

    使用Android系统提供的DownloadManager来下载文件

    以下是一个使用`DownloadManager`进行文件下载的简单示例: 1. 首先,在`onCreate()`方法中获取`DownloadManager`实例,它是通过`getSystemService()`方法获取的,参数为`DOWNLOAD_SERVICE`常量。 ```java ...

    使用Apache HttpClient实现多线程下载的小例子

    在这个小例子中,我们将讨论如何利用HttpClient实现多线程下载,以提高文件下载效率。 首先,我们需要在项目中引入Apache HttpClient的相关依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml ...

    下载列表例子

    2. **使用下载管理器**:许多下载管理软件(如Internet Download Manager、Free Download Manager)支持导入下载列表,一次性处理所有下载任务。 3. **Web应用**:一些网站提供批量下载服务,用户可以上传下载列表,...

    unity实现下载文件

    在这个例子中,我们使用了`UnityWebRequest.GetAssetBundle`方法,但由于我们只是下载文件而不是获取Unity的AssetBundle,因此URL中的路径部分应该指向一个实际的文件,而不是AssetBundle。一旦请求发送并完成,我们...

    android 多线程 下载 更新 ui 例子

    这个例子将展示如何创建一个后台线程来下载文件,以及如何安全地在主线程中更新UI。 1. **线程概念**:在Android中,有两种主要的多线程方式:线程(Thread)和Handler-Looper-Messenger机制。本例可能使用了后者,...

    android中断点下载的例子

    8. **监控下载状态**:可以使用广播接收器或Android下载管理服务(DownloadManager)来监听下载状态,以便在UI上显示进度或通知用户。 9. **完成并保存元数据**:当下载完成后,更新数据库或共享偏好,保存完整的...

    在状态栏中显示进度条的下载更新

    在这个例子中,我们使用DownloadManager来处理下载任务,并通过BroadcastReceiver监听下载进度。每当下载进度有变化,我们都会更新状态栏的进度条,并同步到Activity中的ProgressBar。 总结起来,要在Android状态栏...

    ScanDownload.zip

    2. **Download Manager请求**:在获取到下载链接后,会创建一个DownloadManager.Request实例,设置所需的下载参数,如文件URL、保存位置、通知信息等,然后提交给DownloadManager进行下载。 3. **监听下载状态**:...

    (Swift)Alamofire下载文件

    在`response`闭包中,你可以访问到一个`DownloadResponse`对象,它包含了关于下载进度、错误以及最终文件的信息。通常,你会想要保存文件到特定的路径。这里是一个完整的例子: ```swift let documentsDirectory...

    apk下载自动安装(兼容安卓8.0)

    DownloadManager是Android提供的一个系统服务,用于管理用户的下载任务。它允许你在后台执行下载操作,并提供进度通知和断点续传等功能。要使用DownloadManager,首先需要在AndroidManifest.xml中添加权限: ```xml...

    Android TCP文件下载

    - 或者使用第三方库如Android-DownloadManager,它提供了一套完整的下载管理机制,包括多线程、断点续传等功能。 6. **错误处理**: - 对于网络异常、文件操作失败等情况,需要有适当的错误处理机制,如捕获异常...

    Activiti6.0教程例子下载

    下载后解压(我所使用的是5.12版本的,Activiti更新速度飞快,几乎每两个月就会有一个更新的小版本),看到如下目录: 1) database:里面存放的是Activiti使用到的数据库信息的sql文件,它支持的数据库类型如下图,...

    IDM-UDF:Internet Download Manager-用于AutoIt脚本的IDM UDF

    Internet Download Manager-用于AutoIt脚本的IDM UDF。 截屏 用法 。 解压缩IDM.au3文件并将其复制到“包含”文件夹(C:\ Program Files \ AutoIt3 \ Include)中。 将#Include 添加到您的AutoIt脚本中。 从...

    自制简单的Java下载器.doc

    【自制简单的Java下载器】是一个基于Java编程的项目,它主要展示了如何利用多线程、I/O流和同步机制来实现一个基本的文件下载功能。这个项目由三个核心类构成:Downloader、DownloadManager和DownloadFiles。 1. **...

    webView长按点击下载图片

    以下是一个使用`DownloadManager`的例子: ```java private void downloadImage(String imageUrl) { DownloadManager.Request request = new DownloadManager.Request(Uri.parse(imageUrl)); request.set...

    怎么下载整个网站

    部分文件下载管理器如Internet Download Manager (IDM) 支持批量下载和多线程下载,可以用于下载网站的各个组成部分,但可能不适用于复杂的网站结构。 5. **源码下载**: 如果网站是开源的,你可以直接从源代码...

Global site tag (gtag.js) - Google Analytics