2014-01-05 96 views
2

我從SD卡上讀取文件,並顯示在Gridview上。如何使用DownloadManager在android中停止文件下載?

當我從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) ; 

如何停止該項目下載文件時下載?

回答

9

DownloadManager#enqueue返回代表發生下載的idlong。將long保存在一個變量中。

然後,如果您需要取消下載,請致電DownloadManager#remove()傳遞那麼長時間。

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

//stop a download 
downloadManager.remove(id); 
+0

是的,它是工作,但它需要等待一段時間取消(刪除) – mehmet

1

首先是節省下載請求的long idshared 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> 
相關問題