Android Studio中WebView应用实现下载完成带确定按钮的弹窗
解决方案
要实现下载完成后的弹窗提示,你需要通过**广播接收器(BroadcastReceiver)**监听DownloadManager的下载完成事件,然后在接收器中触发弹窗。下面是具体步骤:
1. 创建广播接收器监听下载完成
首先定义一个内部广播接收器,用来接收下载完成的广播,并弹出提示弹窗:
private BroadcastReceiver downloadCompleteReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 检查是否是DownloadManager的下载完成广播 if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(intent.getAction())) { // 弹出提示弹窗 new AlertDialog.Builder(context) .setTitle("提示") .setMessage("Download Completed") .setPositiveButton("确定", (dialog, which) -> dialog.dismiss()) .show(); } } };
2. 注册广播接收器
在你的Activity的onCreate方法中注册这个广播接收器,确保能接收到下载完成的通知:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_activity_layout); // 注册广播接收器 IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); registerReceiver(downloadCompleteReceiver, filter); // 你的其他初始化代码... }
3. 注销广播接收器
为了避免内存泄漏,一定要在Activity销毁时注销广播接收器:
@Override protected void onDestroy() { super.onDestroy(); // 注销广播接收器 unregisterReceiver(downloadCompleteReceiver); }
4. 可选:验证特定下载任务(避免触发无关下载的弹窗)
如果你希望弹窗只针对你发起的这个图片下载任务,可以保存manager.enqueue(request)返回的下载ID,然后在广播接收器中对比:
// 在发起下载时保存ID long myDownloadId = manager.enqueue(request); // 在广播接收器中验证 long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); if (downloadId == myDownloadId) { // 只处理我们的下载任务 new AlertDialog.Builder(context) .setTitle("提示") .setMessage("Download Completed") .setPositiveButton("确定", (dialog, which) -> dialog.dismiss()) .show(); }
注意事项
- 如果你是在Fragment中实现,记得用
requireContext()获取上下文,避免内存泄漏。 - 对于Android 10及以上版本,你的代码中使用
Environment.DIRECTORY_DOWNLOADS是不需要额外存储权限的,这部分没问题。
内容的提问来源于stack exchange,提问作者Chand Ninder
相关产品推荐
相关产品推荐

