天道酬勤,学无止境

android-download-manager

如何在 API 29 或 Android Q 中使用 DownloadManager 下载文件?(How to Download File Using DownloadManager in API 29 or Android Q?)

问题 由于我是 Android 开发的新手,我正在尝试使用 DownloadManager 来简化应用程序。 这是代码 public class MainActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback{ Button btn; private long referenceID; private DownloadManager downloadManager; private static final int PERMISSION_REQUEST_CODE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(Build.VERSION.SDK_INT >=

2021-12-05 06:27:33    分类:技术分享    android   android-download-manager

Android Pie 上的 DownloadManager 请求延迟(DownloadManager requests delayed on Android Pie)

问题 大约 3 年来,我一直在使用 DownloadManager API 来处理一个应用程序中的下载。 最近,我在 Android Pie 上有一些用户抱怨有时下载在实际开始前会卡住几分钟,从而影响用户体验:他们中的一些人必须重新安装应用程序才能使其正常工作,而另一些人则随着时间的推移问题自行解决。 请注意,我没有为 DownloadManager.Request 实例设置任何特殊设置(例如allowedNetworkTypes 、 setRequiresCharging等)。 我对这个问题的理解是,请求在开始之前会卡在pending或paused状态很长一段时间。 没有注意到 SDK 28 中引入的任何重大更改,尽管这并不重要,因为我的目标是 API 级别 27。 有没有人经历过类似的事情并想出了一些解决方法? 谢谢 回答1 正如上面的评论中提到的,清除下载管理器缓存和数据可以解决 Android 9 Pie 上的这个问题。 要清除这些设置,您需要转到Apps & notifications ,单击See all apps选项,点击右上角的选项菜单,选择Show system ,从列表中选择Download Manager ,点击Storage ,然后清除缓存和存储。 在解决此问题时,我发现尝试使用 DownloadManager 将文件下载到公共目录时,如果使用公共下载位置

2021-12-03 11:56:49    分类:技术分享    android   android-download-manager   android-9.0-pie

Android N - 下载管理器通知取消按钮(Android N - Download Manager Notification Cancel Button)

问题 Android N 在下载管理器通知中有一个新的取消按钮。 我想在我的应用程序中执行一些代码以在用户按下此按钮时停止进度条。 如果有,调用哪个方法? 另请注意,意图过滤器操作 DownloadManager.ACTION_NOTIFICATION_CLICKED 仅在用户单击通知本身时触发,而不是在他/她单击取消按钮时触发。 if_downloadManager = new IntentFilter(); if_downloadManager.addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE); if_downloadManager.addAction(DownloadManager.ACTION_NOTIFICATION_CLICKED); br_downloadManager = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { .... } if (DownloadManager.ACTION

2021-12-01 09:18:33    分类:技术分享    android   android-notifications   android-download-manager   cancel-button

在Android中下载后打开下载的文件(Open a downloaded file after downloading in Android)

问题 我有一个应用程序,其中包含一些指向网络上文件的链接。 我希望在用户选择将文件下载到设备后 - 该文件将自动打开。 这是我的下载代码: private void downloadFile(String url) { if (GeneralHelper.isNetworkAvailable(this)) { Uri uri = Uri.parse(url); DownloadManager.Request r = new DownloadManager.Request(uri); String fileName = url.substring( url.lastIndexOf('/')+ 1, url.length() ); // This put the download in the same Download dir the browser uses r.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName); r.allowScanningByMediaScanner(); // Notify user when download is completed // (Seems to be available since Honeycomb only) r

2021-11-30 14:43:06    分类:技术分享    android   file   android-download-manager

引起:java.lang.IllegalStateException:无法在 Android 6.0 设备中创建目录(Caused by: java.lang.IllegalStateException: Unable to create directory in Android 6.0 devices)

问题 我必须使用 DownloadManager 存储从 url 下载的图像,并将其存储到 sdcard 中,并使用我自己的目录(如“xyz”)。 这是我的代码 File img_directory = null; img_directory = new File(Environment.getExternalStorageDirectory() + "/xyz"); if (!img_directory.exists()) { img_directory.mkdirs(); DownloadManager mgr = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); Uri downloadUri = Uri.parse("my image url"); DownloadManager.Request request = new DownloadManager.Request(downloadUri); request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE) .setAllowedOverRoaming(true) .setTitle("Demo

2021-11-30 05:10:15    分类:技术分享    android   android-sdcard   android-download-manager   imagedownload

DownloadManager - 了解 ERROR_HTTP_DATA_ERROR(DownloadManager - understanding ERROR_HTTP_DATA_ERROR)

问题 我的应用程序在很大程度上依赖于 android DownloadManager组件来下载大约 3-10 兆字节的文件。 当扩展(到数百万次下载)时,大局很清楚: 由于 ERROR_HTTP_DATA_ERROR,约有50% 的下载失败。 我从谷歌分析得到这个信息 根据文档,此错误代码代表: 在 HTTP 级别发生错误接收或处理数据时 COLUMN_REASON 的值。 我发现这个文档的信息量不大。 那里有很多http错误。 下载过程中网络断开怎么办? 在所有下载管理ERROR_HTTP_DATA_ERROR试尝试失败后,它是否也会触发ERROR_HTTP_DATA_ERROR错误? 如果有人能帮助我理解,那就太好了: 有什么方法可以从DownloadManager获取有关确切 http 错误的更多信息? 下载管理器可以触发ERROR_HTTP_DATA_ERROR的最常见情况是什么? 值得一提的另一点:虽然此错误不断累积 - 用户已连接到 WIFI 网络(我将下载管理器设置为仅通过 wifi 下载) 请不要建议我根本不要使用下载管理器。 我知道这个选项,优点和缺点。 我将此选项保存为最后的手段。 回答1 查看下载ERROR_HTTP_DATA_ERROR器的源ERROR_HTTP_DATA_ERROR由方法getErrorCode(int)返回,这是确切的行: case

2021-11-30 03:40:26    分类:技术分享    android   android-download-manager   http-error

使用下载管理器下载文件(Download Files Using download manager)

问题 我正在使用 DownloadManager 类从服务器下载文件 这是我在做什么 public void downloadPdf(String url, String sem, String title, String branch) { Uri Download_Uri = Uri.parse(url); DownloadManager.Request request = new DownloadManager.Request(Download_Uri); //Restrict the types of networks over which this download may proceed. request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE); //Set whether this download may proceed over a roaming connection. request.setAllowedOverRoaming(false); //Set the title of this download, to be displayed in notifications (if enabled)

2021-11-30 00:09:57    分类:技术分享    android   android-download-manager

使用 DownloadManger 的 Android 下载队列(Android download queue using DownloadManger)

问题 我正在使用 DownloadManager 在 android 中下载我的文件,它很棒,因为它可以处理所有事情(连接丢失,重试等)问题是我希望我的文件一个接一个地在队列中下载,据我所知 DownloadManager 没有'不提供此功能。 因此多次调用 DownloadManager.enqueue(...) 会导致所有文件的并发下载。 我怎样才能解决这个问题? 我不能只是在我的活动中排个队,然后将下载一个一个地发送到下载管理器,因为活动随时可能被破坏! IntentService 在这里也不起作用!! 即使它一个一个地处理请求,对 DownloadManager.enqueue() 的调用也会运行得如此之快,然后下一次调用,结果将再次并发下载! 我的第三个选择是使用 LocalService 获取请求并在之前开始的下载完成时调用 DownloadManager.enqueue() 但我应该怎么做? 我的服务即使在运行时也需要从我的活动中获取请求! (所以我不能只是把数据放在意图中)。 为了启用通信,我需要使其成为绑定服务,并且正如文档所说,当没有任何绑定时它会破坏! bound service runs only as long as another application component is bound to it. Multiple components can

2021-11-29 00:52:28    分类:技术分享    android   android-service   android-download-manager   android-service-binding

在 Android 中使用 DownloadManager 从标题中获取文件名(Get file name from headers with DownloadManager in Android)

问题 我正在使用 DownloadManager 从 url 下载视频文件。 问题是如果我使用默认文件夹下载文件,我在画廊中看不到视频。 另外,如果我尝试使用这种方法: request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, 'filename'); 我需要在下载之前知道文件名,在这种情况下,我不知道。 而且,我在 url 中没有文件的名称。 如何从标题中获取文件名并将名称传递给方法 setDestinationInExternalPublicDir ? 其他选择? 回答1 如果有人想要执行 HEAD 请求以获取文件名: class GetFileName extends AsyncTask<String, Integer, String> { protected String doInBackground(String... urls) { URL url; String filename = null; try { url = new URL(urls[0]); String cookie = CookieManager.getInstance().getCookie(urls[0]); HttpURLConnection con = (HttpURLConnection) url

2021-11-28 05:53:54    分类:技术分享    android   android-download-manager

如何启用 Android 下载管理器(How to Enable Android Download Manager)

问题 我正在使用 Android 下载管理器下载文件列表。 最近我看到一个崩溃报告说 Unknown java.lang.IllegalArgumentException: Unknown URL content://downloads/my_downloads 后来,我发现原因是因为用户禁用了Android下载管理器。 我通过使用下面的代码检查它的包名称来检查下载管理器是否被禁用。 int state = this.getPackageManager().getApplicationEnabledSetting("com.android.providers.downloads"); 现在,如果下载管理器被禁用,我需要找到一种方法来启用它。 我尝试使用 Manifest 中的权限设置它的启用状态,但我不断收到安全异常。 this.getPackageManager().setApplicationEnabledSetting("com.android.providers.downloads", PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>

2021-11-28 00:59:09    分类:技术分享    android   android-package-managers   android-download-manager   android-settings