- 浏览: 847837 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
loveseed1989:
您好,我用您的方法运行Cone.java,会给我报java.l ...
vtk学习笔记 --- 编译vtk库和java库 -
60love5:
60love5 写道首先谢谢你的解析,但你这个验证可见性的小程 ...
多线程中共享对象的可见性 -
60love5:
首先谢谢你的解析,但你这个验证可见性的小程序是存在问题的,你的 ...
多线程中共享对象的可见性 -
Gamehu520:
...
java 中的Unsafe -
shanpao1234560:
这个list不是静态的第一种情况下也会有线程安全的问题么,求指 ...
一个看似线程安全的示例
最近自己在写个小项目,需要从服务器下载文件,之前也写过下载文件的代码,都是采用传统的方式,既使用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
还有更多的用法,等待后面去发现!
评论
3 楼
347932666
2012-03-03
2 楼
aswang
2012-02-27
jstl1point0 写道
限制了SDK的版本,没用
是的,这个只能在2.3及以上版本使用。但是,可以把它的源码拿过来阅读,进行改写实现自己的下载。
另外对于内置于系统的应用,还是可以使用这个DownloadProvider的。
1 楼
jstl1point0
2012-02-27
限制了SDK的版本,没用
发表评论
-
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(二)
2014-11-21 22:23 3216要求:使用Oracle Streams捕获某个用户下部 ... -
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(一)
2014-11-20 22:23 2806要求:使用Oracle Streams捕获某个用户下部分表 ... -
如何去掉在浏览器中打开java applet时的警告对话框
2013-08-24 12:10 6998好久没更新博客了! 最近,由于项目要求,需要将sw ... -
Android 内存泄露笔记
2013-03-05 23:10 01、大部分内存泄露都是错误的持有了Activity或者Con ... -
java 虚拟机总结 【思维导图】
2012-12-22 20:11 2098java虚拟机总结思维导图: 参考《深入理解jav ... -
Java虚拟机字节码执行引擎 【思维导图】
2012-12-22 19:51 1687java虚拟机字节码执行引擎思维导图总结: 参考《深入理 ... -
java 垃圾回收相关总结 【思维导图】
2012-12-21 19:03 3289java垃圾回收相关总结: 参考《深入理解java ... -
java并发中的延迟初始化
2012-12-12 19:17 4707在《java并发编程实战 ... -
java同步容器与并发容器
2012-12-09 18:07 4365何为同步容器:可以简 ... -
一个看似线程安全的示例
2012-12-09 14:56 5082在《java并发编程实战》第四章4.4.1节给出了一个程序示 ... -
多线程中的long和double
2012-12-08 19:26 4207在看一些代码的时候,会发现在定义long型和double型的 ... -
多线程中共享对象的可见性
2012-12-08 18:52 5152在阅读《java并发编程实战》的第三章的时候,看到书中的一个 ... -
一个快速、轻量级 Collection 库 Trove
2012-12-07 09:35 3766Trove一个快速、轻量级针对java原子类型(byte,i ... -
java 中的Unsafe
2012-12-05 22:25 32761在阅读AtomicInteger的源码时,看到了这个类:su ... -
在ubuntu10上编译Thrift0.8.0
2012-08-01 15:34 2160下载thrift0.8.0 ,地址: http:// ... -
生活小工具--记账小助手1.0发布
2012-05-31 15:08 1760因为自己平时喜欢记账,把每日的消费情况都记录下来,所以希望找 ... -
话费速查升级版v1.3发布
2012-05-04 12:47 1443前段时间开发了一个话费速查的小应用,最近一直保持每周更新一个 ... -
编译zeromq的java绑定:jzmq
2012-05-03 22:47 135521、 下载zeromq源码:http://www.ze ... -
Android软件包静默安装小应用 - 附源码
2012-04-21 20:50 12424老早之前,写了一个android软件包静默安装的应用,放在工 ... -
最方便的联通话费,余额查询软件来了! --- 联通话费速查v1.2
2012-04-12 18:01 4045软件介绍: 联通话费速查是一款针对联通 ...
相关推荐
通过以上步骤,我们就使用`DownloadManager`成功地创建了一个文件下载任务,并在通知栏显示了下载进度。在实际应用中,还可以根据需要设置更多的参数,如限制下载速度、设置优先级等。同时,注意处理可能的异常情况...
在Android系统中,`DownloadManager`是一个用于管理设备上的文件下载的系统服务。它提供了一种方便、可靠的方式来异步下载文件,并且可以处理网络中断、电源问题等,确保下载的完整性。本示例旨在展示如何使用`...
DownloadManager是一个可以处理长时间运行的HTTP下载的系统服务,客户端请求一个URL地址去下载一个目标文件, 下载管理器将在后台进行下载,处理HTTP交互,并在失败或连接更改和系统重新启动后重试下载。
对于大型文件或需要后台下载、断点续传的情况,建议使用`DownloadManager`。它是一个系统服务,可以处理文件的下载,并提供通知、错误处理等功能。以下是如何使用`DownloadManager`的基本步骤: ```java // 获取...
以下是一个使用`DownloadManager`进行文件下载的简单示例: 1. 首先,在`onCreate()`方法中获取`DownloadManager`实例,它是通过`getSystemService()`方法获取的,参数为`DOWNLOAD_SERVICE`常量。 ```java ...
在这个小例子中,我们将讨论如何利用HttpClient实现多线程下载,以提高文件下载效率。 首先,我们需要在项目中引入Apache HttpClient的相关依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml ...
2. **使用下载管理器**:许多下载管理软件(如Internet Download Manager、Free Download Manager)支持导入下载列表,一次性处理所有下载任务。 3. **Web应用**:一些网站提供批量下载服务,用户可以上传下载列表,...
在这个例子中,我们使用了`UnityWebRequest.GetAssetBundle`方法,但由于我们只是下载文件而不是获取Unity的AssetBundle,因此URL中的路径部分应该指向一个实际的文件,而不是AssetBundle。一旦请求发送并完成,我们...
这个例子将展示如何创建一个后台线程来下载文件,以及如何安全地在主线程中更新UI。 1. **线程概念**:在Android中,有两种主要的多线程方式:线程(Thread)和Handler-Looper-Messenger机制。本例可能使用了后者,...
8. **监控下载状态**:可以使用广播接收器或Android下载管理服务(DownloadManager)来监听下载状态,以便在UI上显示进度或通知用户。 9. **完成并保存元数据**:当下载完成后,更新数据库或共享偏好,保存完整的...
在这个例子中,我们使用DownloadManager来处理下载任务,并通过BroadcastReceiver监听下载进度。每当下载进度有变化,我们都会更新状态栏的进度条,并同步到Activity中的ProgressBar。 总结起来,要在Android状态栏...
2. **Download Manager请求**:在获取到下载链接后,会创建一个DownloadManager.Request实例,设置所需的下载参数,如文件URL、保存位置、通知信息等,然后提交给DownloadManager进行下载。 3. **监听下载状态**:...
在`response`闭包中,你可以访问到一个`DownloadResponse`对象,它包含了关于下载进度、错误以及最终文件的信息。通常,你会想要保存文件到特定的路径。这里是一个完整的例子: ```swift let documentsDirectory...
DownloadManager是Android提供的一个系统服务,用于管理用户的下载任务。它允许你在后台执行下载操作,并提供进度通知和断点续传等功能。要使用DownloadManager,首先需要在AndroidManifest.xml中添加权限: ```xml...
- 或者使用第三方库如Android-DownloadManager,它提供了一套完整的下载管理机制,包括多线程、断点续传等功能。 6. **错误处理**: - 对于网络异常、文件操作失败等情况,需要有适当的错误处理机制,如捕获异常...
下载后解压(我所使用的是5.12版本的,Activiti更新速度飞快,几乎每两个月就会有一个更新的小版本),看到如下目录: 1) database:里面存放的是Activiti使用到的数据库信息的sql文件,它支持的数据库类型如下图,...
Internet Download Manager-用于AutoIt脚本的IDM UDF。 截屏 用法 。 解压缩IDM.au3文件并将其复制到“包含”文件夹(C:\ Program Files \ AutoIt3 \ Include)中。 将#Include 添加到您的AutoIt脚本中。 从...
【自制简单的Java下载器】是一个基于Java编程的项目,它主要展示了如何利用多线程、I/O流和同步机制来实现一个基本的文件下载功能。这个项目由三个核心类构成:Downloader、DownloadManager和DownloadFiles。 1. **...
以下是一个使用`DownloadManager`的例子: ```java private void downloadImage(String imageUrl) { DownloadManager.Request request = new DownloadManager.Request(Uri.parse(imageUrl)); request.set...
部分文件下载管理器如Internet Download Manager (IDM) 支持批量下载和多线程下载,可以用于下载网站的各个组成部分,但可能不适用于复杂的网站结构。 5. **源码下载**: 如果网站是开源的,你可以直接从源代码...