【问题标题】:How to stop the file download in android by using DownloadManager?如何使用 DownloadManager 在 android 中停止文件下载?
【发布时间】:2014-01-22 15:50:06
【问题描述】:

我从 SD 卡读取文件,并在 Gridview 上显示。

当我从Gridview 中选择项目并获取项目的position 时。

我点击下载按钮,它将下载该项目。

当我使用downloadManager 时如何停止项目下载?

下载按钮的代码如下:

FileNode file = mFileList.get(temp_position) ;//Get the item I have select from Gridview

                                final String filename = file.mName.substring(file.mName.lastIndexOf("/") + 1) ;
                                final String urlString = "http://" + mIp + file.mName ;

                                String serviceString = Context.DOWNLOAD_SERVICE ;
                                DownloadManager downloadManager ;
                                downloadManager = (DownloadManager) getActivity().getSystemService(
                                        serviceString) ;

                                Uri uri = Uri.parse(urlString) ;
                                DownloadManager.Request request = new Request(uri) ;
                                request.setTitle(filename) ;
                                request.setDescription(urlString) ;

                                String ext = filename.substring(filename.lastIndexOf(".") + 1)
                                        .toLowerCase(Locale.US) ;
                                String mimeType = MimeTypeMap.getSingleton()
                                        .getMimeTypeFromExtension(ext) ;

                                Log.i("MIME", ext + "  ==>  " + mimeType) ;

                                if (mimeType != null) {
                                    request.setMimeType(mimeType) ;
                                }
                                request.allowScanningByMediaScanner() ;

                                request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) ;

                                request.setDestinationInExternalPublicDir(MainActivity.sAppName, filename) ;

                                downloadManager.enqueue(request) ;

文件正在下载时如何停止项目下载?

【问题讨论】:

    标签: android gridview download android-download-manager


    【解决方案1】:

    DownloadManager#enqueue 返回一个long,代表正在下载的id。将 long 保存在一个变量中。

    那么,如果你需要取消下载,那么就调用DownloadManager#remove()传入那么长的时间。

    例如

    //start a download
    long id = downloadManager.enqueue(request);
    
    //stop a download
    downloadManager.remove(id);
    

    【讨论】:

    • 是的,它正在工作,但需要等待一段时间才能取消(删除)
    【解决方案2】:

    首先将下载请求的long id保存在shared preferences

    喜欢这个

    SharedPreferences preferenceManager = PreferenceManager.getDefaultSharedPreferences(ACTIVITY CONTEXT);
        Editor PrefEdit = preferenceManager.edit();
        PrefEdit.putLong("Download_ID", id);
        PrefEdit.commit();
    

    现在编写一个自定义的broadcast receiver,它将监听最近开始下载的点击。

        public class DownloadManagerBR extends BroadcastReceiver {
            DownloadManager down_m ;
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                down_m = (DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);
                SharedPreferences preferenceManager 
                = PreferenceManager.getDefaultSharedPreferences(context);
                long id = preferenceManager.getLong("Download_ID", 0);
                if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
    
                }
                else if (DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(action)) {
                //IN THIS SECTION YOU CAN WRITE YOUR LOGIC TO CANCEL DOWNLOAD AS STATED IN ABOVE ANSWER 
                  downloadManager.remove(id);
                }
            }
        } 
    

    并像这样在Android Manifest 中注册您的广播接收器

    <receiver android:name=".DownloadManagerBR" >
                <intent-filter>
                    <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
                    <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED" />
                </intent-filter>
            </receiver>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多