2013-01-21 2 views
5

Download Manager을 사용하여 내 서버에서 이미지를 다운로드하고 있습니다.Android : DownloadManager - 알림 부착

파일을 잘 다운로드하고 내가 원하는 곳에 둔다. 그러나 어떤 이유로 든 알림이 튀어 나와서을 제거 할 수 없습니다. 이 다운로드되면

mDownloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); 

Uri uri = Uri.parse("URL")); 

long enqueue = mDownloadManager.enqueue(new DownloadManager.Request(uri) 
      .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI) 
      .setAllowedOverRoaming(false) 
      .setTitle("Title") 
      .setDescription("File description") 
      .setDestinationInExternalPublicDir("Folder", "Filename") 
      .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)); 

BroadcastReceiver onComplete = new BroadcastReceiver() { 
    public void onReceive(Context ctxt, Intent intent) { 
     Toast.makeText(getApplicationContext(), "Download Completed", Toast.LENGTH_SHORT).show(); 
    } 
}; 

어떻게 알림을 제거 할 다음과 같이 다운로드 관리자에 대한 코드는 무엇입니까?.

나는 모든 다른 알림 표시 모드를 운 좋게 설정하려고했습니다. 일단 완료되면 BroadcastReceiver에서 할 수있는 일이 있습니까?

답변

8

나는 내 문제를 해결할 수있었습니다. BroadcastReceiver에서 나는 다운로드 ID를 의도로부터 가져와 DownloadManager에서 제거해야했습니다.

BroadcastReceiver onComplete = new BroadcastReceiver() { 
    public void onReceive(Context ctxt, Intent intent) { 
     Toast.makeText(getApplicationContext(), "Download Completed", Toast.LENGTH_SHORT).show(); 

     // Get the download_id of the completed download. 
     long download_id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); 

     // Remove the completed download from the DownloadManager 
     mDownloadManager.remove(download_id); 
    } 
}; 

는 또한 mDownloadManager.remove(download_id)을 수행하여,이 메모리에서 파일을 삭제 점에 유의하고 싶다. 원래 저장하기를 원했던 위치에 파일을 영구 저장하기 위해 추가 코드를 추가해야했습니다.

+2

"extra_download_id"하드 코딩 대신 DownloadManager.EXTRA_DOWNLOAD_ID를 사용하십시오 –

+0

다른 해결책이 있습니까? 즉, 다운로드 한 파일을 제거하여 알림을 지우는 것은 매우 깨끗한 편이 아닙니다 (먼저 파일을 저장해야 함). 즉, 알림 및 파일 삭제만으로 파일을 삭제할 수 있습니다. – Christian