下载请求 要想使用下载功能,首先得构建一个下载请求,说明从哪里下载、下载参数为何、下载的文件保存到哪里等等。...Request.setDestinationInExternalFilesDir : 设置下载文件在本地的保存路径。...查询下载进度 虽然下载进度可在通知栏上查看,但是有时APP自身也想了解当前的下载进度,那就要调用DownloadManager的query方法。...2、下载进行时的通知栏点击事件:在下载过程中,用户点击通知栏上的下载任务,系统便发出action为DownloadManager.ACTION_NOTIFICATION_CLICKED(android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED...后来在实际开发中测试发现,DownloadManager其实比较智能,当网络一直是允许类型时,任务会一直下载;当网络断开或者不在允许范围内时,任务会自动暂停下载;只要网络连上或者切换到允许范围内,那么任务会自动恢复下载
前言 项目中有需求在APP的Webview中长按图片可以保存。后来就去研究一下该怎么实现,顺便整理了一下。..."); contextMenu.add(0, 1, 0, "点击保存") .setOnMenuItemClickListener(new...request.setDestinationInExternalFilesDir(WebViewActivity.this, "/img", "/a.png");...DownloadManager downloadManager = (DownloadManager) getSystemService(...Toast.makeText(WebViewActivity.this, "下载成功", Toast.LENGTH_LONG).show(); }
前言 项目中有需求在APP的Webview中长按图片可以保存。后来就去研究一下该怎么实现,顺便整理了一下。...(); //设置图片的保存路径 request.setDestinationInExternalFilesDir(WebViewActivity.this..., "/img", "/a.png"); DownloadManager downloadManager = (DownloadManager...Toast.makeText(WebViewActivity.this, "下载失败", Toast.LENGTH_LONG).show(); }.../ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" / 这样就可以实现在Webview中长按图片点击下载功能了
mDownloadManager.getUriForDownloadedFile(downId); startInstall(context, downloadUri); } /** * 跳转到安装界面 * @param context 作用域...//获取下载管理器 DownloadManager manager =(DownloadManager)mContext.getSystemService(mContext.DOWNLOAD_SERVICE...(true); //标题 down.setDestinationInExternalFilesDir(mContext, null, "XXX升级中..."); //将下载请求放入队列...,返回下载id downId = manager.enqueue(down); }else{ Toast.makeText(mContext,"升级中..."...( DownloadManager.COLUMN_TOTAL_SIZE_BYTES)); //获取文件下载总大小 fileTotalSize =cursor.getLong
此权限策略的更改有多重副作用: 私有文件的文件权限不应再由所有者放宽,为使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE而进行的此类尝试将触发SecurityException...分享私有文件内容的推荐方法是使用FileProvider。 DownloadManager不再按文件名分享私人存储的文件。...通过使用DownloadManager.Request.setDestinationInExternalFilesDir())或DownloadManager.Request.setDestinationInExternalPublicDir...())将下载位置设置为公共位置的老App仍可以访问COLUMN_LOCAL_FILENAME中的路径,但是Google还是强烈反对使用这种方法。...保存这些元数据便于你在Config变更后决定是否需要刷新缓存数据。 ③ 避免用像素单位指定尺寸,因为像素不会随屏幕密度缩放。应改为使用dp等单位。
哈哈,自我感觉,在我印象中,我要照相拍一张照片,不是应该直接调用一句代码可以完成吗。...下载管理器 “DownloadManager下载管理器是一个处理长时间运行的HTTP下载的系统服务。客户端可以请求将URI下载到特定的目标文件。...下载管理器将在后台执行下载,负责HTTP交互,并在失败或跨连接更改和系统重启后重试下载。...DownloadManager,大家应该都很熟悉吧,android2.3就开通提供的API,很方便就可以下载文件,包括可以设置是否通知显示,下载文件夹名,文件名,下载进度状态查询等等。?...但是也正是由于风格固定,在实际多样的APP中应用比较少。 来个?
效果图 download.gif 白话分析: 多线程:肯定是多个线程咯 断点:线程停止下载的位置 续传:线程从停止下载的位置上继续下载,直到完成任务为止。...当然要创建线程表,保存当前线程下载开始的位置和结束的位置,还有完成进度等。...创建file表,保存当前下载的文件信息,比如:文件名,url,下载进度等信息 线程表: public static final String CREATE_TABLE_SQL="create table...并且在一些高并发的情况,仍然可能会创建多个实例,这称为双重检验锁定失效。...首先写的肯定是DownLoadManager类,就是管理任务下载的类。不多说,直接看代码。
案例分析考虑一个多线程下载管理器,其中多个线程需要从队列中获取URL并下载文件:public class DownloadManager { private final ConcurrentLinkedQueue...downloadFile**方法**:这是一个私有方法,模拟下载文件的逻辑。在实际应用中,这里将包含下载文件的代码。...优缺点分析优点线程安全:无需额外同步即可在多线程中安全使用。高性能:基于CAS操作,具有较高的并发性能。无界队列:理论上可以存储无限数量的元素。缺点无容量限制:可能导致内存溢出,需要合理控制队列大小。...运行程序的步骤:保存文件:将上述代码保存为名为ConcurrentLinkedQueueDemo.java的文件。...编译程序:打开命令行工具,导航到保存文件的目录,并运行javac ConcurrentLinkedQueueDemo.java命令编译Java程序。
前言 内容类应用中图片或文件下载,一般应用中应用更新和升级,这些都是经典的下载场景。下载是项目中基础且重要的模块。...部分下载功能 队列下载 暂停、取消或恢复下载 并行文件下载(2 个或可以更改) 支持批量下载 支持平台: Linux | MacOS | Windows | Android | iOS 使用方法 简单下载一个文件...(这样的设计是不是看起来更 Dart) 任务请求抽象:DownloadRequest 重点说下 cancelToken,该字段在暂停,取消,恢复下载任务实现中起了关键作用。...任务管理表,里面的事情一般不会去记,在脑子里面。软件开发中,PM 该表格维护者。 完成某任务一般流程如下: 生成一个任务请求表达意愿。 查询任务管理表中任务状态并决定是否有资格真正添加到请求列表。...下载过程中如果之前暂停未下载完毕的文件,通过设置 header 中 range:bytes 来实现断点续传,将后续请求到文件存放到.temp中,然后追加到原未下载完成文件后。(下述第 29 行)。
一直听说过Android自带的DownloadManager,只是拖延症发作,一直没有时间去研究研究,其实在很多项目开发中,都有一个功能是非常重要的,那就是应用的检查更新了!...| DownloadManager.Request.NETWORK_WIFI); //通知栏设置 //显示在通知栏 request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE...= new int[]{ -1, -1, 0 }; //通过构建下载请求时获得的downloadId进行文件查询 DownloadManager.Query query...} } } }; //注册,这里只能拦截文件下载成功的广播,并不能进行进度监听,在适当的地方取消订阅广播 context.registerReceiver.../** * 由于DownloadManager自身没有提供实时进度的api,所以通过以下定时器获取已下载的文件大小 */ private void updateProgress() {
分区存储将影响在Android10系统首次安装启动、且targetSdkVersion =29的应用。需要访问和共享外部存储文件的应用会受到影响,需要进行兼容性适配。...影响范围: 在Android 10上运行的应用: 1.targetSdkVersion <= 28,不受影响 2.如果targetSdkVersion = 29,默认情况应用外部存储可见性将被过滤...在应用中想要获取当前应用的专有存储目录路径是可以用Context.getExternalFilesDir()的方式获取。...共享媒体集合存储 在共享媒体集合存储中保存媒体文件时,需要根据文件的类型选择MediaStore。...// 把图片下载到共有媒体集合中,并在相册中显示 // 创建ContentValues, 并加入信息 val values = ContentValues() values.put(MediaStore.Images.Media.DESCRIPTION
Android 开发中,经常有从服务器下载数据的需求出现,尤其是在线更新App的情形。...Android自带的DownloadManager是一个很好的下载文件的工具。...Uri.parse(url)); //移动网络情况下是否允许漫游 request.setAllowedOverRoaming(false); //在通知栏中显示...//将下载请求加入下载队列,加入下载队列后会给该任务返回一个long型的id,通过该id可以取消任务,重启任务、获取下载的文件等等 downloadId = downloadManager.enqueue...--在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
私有目录被限制访问是指在Android7.0中为了提高应用的安全性,在7.0上应用私有目录将被限制访问。StrictMode API是指禁止向你的应用外公开 file:// URI。...如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,则会报出异常。...</provider 第二步:在res/xml中创建file_paths.xml文件。...query; ContentObserver contentObserver; /** 下载apk的线程 */ public void downloadAPK() { manager = (DownloadManager...| DownloadManager.Request.NETWORK_WIFI); // 显示下载界面 down.setVisibleInDownloadsUi(true); // 设置下载路径和文件名
String dirNameString = url.substring(url.lastIndexOf("/") + 1); //获得下载文件的大小 DecimalFormat decimalFormat...dialog downdialog.show(); } } 将MyDownloadStart设置到WebView上; mWebView.setWebViewDownListener(new MyDownloadStart...()); 设置Dialog,点击是调用系统下载 DownloadManager downloadManager = (DownloadManager) getContext().getSystemService...); //下载的路径,第一个参数是文件夹名称,第二个参数是下载的文件名 request.setDestinationInExternalPublicDir("SooDown",dirName.getText...Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent1); } } } 最后一步,不要忘记配置BroadcastReceiver 在AndroidManifest.xml
image 介绍 在移动开发过程中,应用升级是必不可少的一个环节,所以,r_upgrade应用升级插件就出现了,这里先鼓掌欢迎??...Android热更新 开始吧 1.使用插件: 在pubspec.yaml文件添加下面代码 dependencies: r_upgrade: last version 2.使用打开链接的方式进行更新...: true: 调用系统的DownloadManager进行下载 优势:接入简单,无需担心操作,下载全由系统管理 劣势:无法使用http方式进行下载,无法在下载过程中点击通知栏进行暂停,无法根据有无网络进行暂停和继续下载...热更新 (使用 DownloadManager) 你可以使用升级返回的id进行热更新,下载的文件需要将新版本生成的isolate_snapshot_data、kernel_blob.bin、vm_snapshot_data...'))); } - 重启应用即可 注意,在Android应用中,请确保AndroidManifest.xml中声明以下权限,并在6.0系统上进行动态授权,不然会调用升级方法将抛出权限异常
操作 在开始研究Block的copy操作之前,先来思考一下:Block是存储在栈上还是堆上呢?...栈块存在于栈内存中, 超出其作用域则马上被销毁 堆块存在于堆内存中, 是一个带引用计数的对象, 需要自行管理其内存 简而言之,存储在栈中的Block就是栈块、存储在堆中的就是堆块、既不在栈中也不在堆中的块就是全局块...栈上的Block,如果其所属的变量作用域结束,该Block就被废弃,如同一般的自动变量。当然,Block中的__block变量也同时被废弃。如下图: 图片上传中......(image-16f5c5-1566284363726-0) 通过forwarding, 无论是在block中还是 block外访问block变量, 也不管该变量在栈上或堆上, 都能顺利地访问同一个__.../AFNetworking/AFNetworking/zip/master" //下载类 DownloadManager * downloadManager = [[DownloadManager
《Android Studio开发实战 从零基础到App上线(第2版)》在书后面的附录中给出了Android8和Android9的主要特性说明,附录表格如下图所示: 不过附录表格只涵盖了常见的功能代码适配...此时要在network模块的res目录下面创建xml目录,并在xml目录下新建文件network_security_config.xml,文件内容如下所示: <?...1、Android10默认开启沙箱模式,即使已经动态申请了存储卡读写权限,在外部存储上读写文件仍然失败。...此时要在代码中添加版本号判断,如果当前系统版本大于等于29,就不再开关WiFi,代码例子如下: if (Build.VERSION.SDK_INT >= 29) { // Android10...在Android10及以下版本,该值默认为true,但从Android11开始该值默认为false。 设置代码示例如下: // 设置是否允许访问文件,如WebView访问存储卡的文件。
DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息。...1、int[] getBytesAndStatus(long downloadId) 这个方法就是传入我们上面所说的那个enqueue接口返回的下载id,可以获取到这个下载文件已经下载了多大,总共多大,...2、int[] getDownloadBytes(long downloadId) 这个方法就是传入下载id,可以获取到已经下载了多大,总共这个下载文件有多大的信息,返回信息也是一个int数组。...3、int getErrorCode(long downloadId) 这个方法是传入下载id,得到的返回信息就是这个文件下载失败的错误代码,error code。...() 这个方法就是判断在DownloadManager中是否存在停止下载的和重新下载的方法 10、int pauseDownload(long... ids) 这个方法就是传入多参数的id,停止响应下载
本文实例讲述了Android基于自带的DownloadManager实现下载功能。...); downloadManager.enqueue是加入下载请求到下载管理类中,并且会返回一个下载的ID。...request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI); 大文件只能在wifi下下载 需要注册一个下载完成的广播,自定义这个广播...查询Downloads的DB,但是在stackoverflow中的解释是 * You can't access this DB from my application....content://media/external/file/452122 这种内容,所以可以这样获取到下载的文件 复制代码 代码如下: Cursor cursor = getContentResolver
一、概述 说到Android中的文件下载,Android API中明确要求将耗时的操作放到一个子线程中执行,文件的下载无疑是需要耗费时间的,所以要将文件的下载放到子线程中执行。...二、服务端准备 在这个小例子中我以下载有道词典为例,在网上下载有道词典的安装包,在eclipse中新建项目web,将下载的有道词典安装包放置在WebContent目录下,并将项目发布到Tomcat...id private int threadId; //下载的文件路径 private String path; //保存的文件 private File file; //下载的进度条更新的监听器...类 这个类主要是对下载过程的管理,包括下载设置下载后文件要保存的位置,计算多线程中每个线程的数据下载量等等。...事件,在onClick事件中开启一个线程进行下载操作,同时子线程中获取到的数据,通过handler与Message机制传递到主线程,更新界面显示。
领取专属 10元无门槛券
手把手带您无忧上云