2014-01-05 3 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은 다운로드의 id을 나타내는 long을 반환합니다. 변수에 long을 저장하십시오.

다운로드를 취소해야하는 경우 그 시간이 지나면 DownloadManager#remove()으로 전화하십시오.

예는

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

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

처럼 Android Manifest에 방송 수신기를 등록 네, 그것은 노력하고 있지만, (삭제) 취소하는 동안 기다려 필요 – mehmet

1

우선 지금 최근에 시작된 다운로드를 클릭 경청하는 사용자 정의 broadcast receiver 쓰기이

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

처럼 shared preferences

에서 다운로드 요청의 long id을 저장 .

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); 
      } 
     } 
    } 

<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> 
관련 문제