2012-09-19 3 views
7

DownloadManager는 비정상적인 모바일 인터넷 연결에서 백그라운드 다운로드가 많은 앱에 적합한 선택입니다.Android DownloadManager : 다운로드가 실패하지만 COLUMN_REASON은 "자리 표시 자"만 반환합니다.

웹에서 발견 튜토리얼 코드를 사용하여 응용 프로그램과 같이 시스템의 DM에서 다운로드를 요청할 수있다 : 그 코드에

// in onCreate() 
dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 

// in requestData() 
Uri u = Uri.parse("http://server:8000/feed/data"); 
Request dreq = new Request(u); 
dreq.setNotificationVisibility(Request.VISIBILITY_HIDDEN); 
downloadID = dm.enqueue(dreq); 

URL은 로컬 컴퓨터에서 테스트 서버입니다. URL이 작동하면 Android 에뮬레이터의 브라우저가 페이지를 검색 할 수 있으며 내 앱이 DownloadManager를 통해 해당 페이지를 요청하고 위에 인용 된 코드가 HTTP 코드 200을 반환합니다.

DM이 파일을 검색 할 때 호출되는 ACTION_DOWNLOAD_COMPLETE BroadcastReceiver의 관련 코드입니다.

Query q = new Query(); 
q.setFilterById(downloadID); 
Log.i("handleData()", "Handling data"); 
Cursor c = dm.query(q); 
if (c.moveToFirst()) { 
    Log.i("handleData()", "Download ID: " + downloadID + "/" + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_ID))); 
    Log.i("handleData()", "Download Status: " + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS))); 
    if (c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) { 
    String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)); 
    Log.i("handleData()", "Download URI: " + uriString); 
    } else if (c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_FAILED) { 
    Log.i("handleData()", "Reason: " + c.getString(c.getColumnIndex(DownloadManager.COLUMN_REASON))); 
    } 
} 

이상한 결과는 다음이다 :

DOWNLOAD_STATUS 16 (또는 STATUS_FAILED)하지만, 그 이유는 "자리"이다.

왜 그럴까요? 서버가 200 상태 코드를 반환 할 때 왜 실패합니까? 그리고 DownloadManager가 이유를 제시하지 않는 이유는 무엇입니까?

답변

14

여기에 답해주세요.

다음과 같은 문제가 있습니다. COLUMN_REASON은 문자열이 아니며 숫자 값입니다.

Log.i("handleData()", "Reason: " + c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON))); 

은 실제 오류 코드를 반환합니다.

+0

무엇이 어떤 의미인지 알 수 있습니다. – Nick

+1

[DownloadManager API doc] (http://developer.android.com/reference/android/app/DownloadManager.html)에 여러 가지 가능한 값이 나와 있습니다. - " 해당 페이지에서 'COLUMN_REASON 값'을 선택하십시오. – hez

관련 문제