2011-12-21 3 views
2

DownloadManager를 사용하여 Mobile/4G 연결을 사용하려고 할 때이 문제가 발생하지만 다운로드가 지연됩니다. Android 2.3.4 휴대 전화를 사용하고 있습니다. 내 코드는 2.3.3 API를 사용하고 있습니다. 나는 다음과 같은 명령을하고 있어요Android DownloadManager 'Download Requires Network'오류가 발생했습니다.

는 목록

는하지만 다운로드하려고 시도 할 때마다
request.setAllowedNetworkTypes(Request.NETWORK_MOBILE); 

, 그것은이 DownloadManager에서 다운로드를 배치합니다 (I는 4G/3G를 사용하도록 연결을 강제 할)하지만 영원히 남아 "진행 중"상태이고 상단의 오류는 파일 이름과 "다운로드 필요 네트워크"오류를 나열합니다.

중단 요청을 다운로드 (92)에 대해 :이 다운로드하려고 할 때

나는, 내가 오류 다음 참조 추가 조사 및 로그 캣의 로그를 볼 수있는 내 장치를 연결하면 다운로드하지 않도록 요청 된 현재의 네트워크 유형을 사용

나는 다음과 같은 권한이 : 그것은 될 수 있는지의

android.permission.WRITE_OWNER_DATA 
android.permission.READ_OWNER_DATA 
android.permission.WRITE_EXTERNAL_STORAGE 
android.permission.INTERNET  
android.permission.ACCESS_NETWORK_STATE 
android.permission.ACCESS_WIFI_STATE 
android.permission.CHANGE_WIFI_MULTICAST_STATE 
android.permission.CHANGE_NETWORK_STATE 
android.permission.CHANGE_WIFI_STATE 

어떤 아이디어? 허가가 누락 되었습니까? 네트워크 연결 만 사용하도록 지정하려면 다른 설정이 필요합니까?

EDIT : 새로운 Galaxy 태블릿에서이 작업을 시도했으며이 장치를 사용하면 다음과 같은 동작이 나타납니다. Wi-Fi가 켜져 있고 연결되어 있으면 NETWORK_MOBILE을 사용하도록 지정할 때 다운로드하지 못합니다. Wi-Fi가 꺼져 있거나 연결되어 있지 않으면 4G 연결을 사용하여 문제가 없습니다. 나는 이것이 장치에 의해 수행되는 보안 기능이라고 생각하고 있는데,이 기능은 무시 될 수 있습니까?

+0

메인 스레드에서 DownloadManager를 사용하고 있습니까? –

+0

다음과 같은 활동이 있습니다. 의도 i = new Intent(); i.setAction (DownloadManager.ACTION_VIEW_DOWNLOADS); startActivity (i); 또한 다음을 시도해 보았습니다. ConnectivityManager cm = (ConnectivityManager) getBaseContext(). getSystemService (Context.CONNECTIVITY_SERVICE); cm.startUsingNetworkFeature (ConnectivityManager.TYPE_MOBILE, "enableHIPRI"); – azdragon2

+0

당신은 2.3 API를 사용하고 있다는 것을 의미합니까? 왜냐하면 DownloadManager는 Api 레벨 9 (2.3 진저 브레드)까지 사용할 수 없었기 때문입니까? –

답변

1

이 오류는 데이터 연결이 없어도 (Wi-Fi에 연결되어 있는지 여부는 중요하지 않음) 발생합니다. NETWORK_MOBILE 그 자체를으로 지정할 수 있지만 데이터 연결이 현재 작동하지 않을 때 다운로드를 시도하면 "네트워크에 필요합니다"라는 오류 메시지가 표시됩니다.

데이터 연결을 다시 얻으려는 조언은 다시 연결될 때까지 걸어 다니는 것입니다. 4G LTE막대 4 개푸른 색이 흰색 대신에 바 표시 아이콘으로 표시되기 때문에 Droid Bionic 휴대 전화에서 데이터 연결을 확인할 수 있습니다.

+0

설명을위한 참고 자료가 있습니까? – Amir

1

나는 당신이 당신의 다운로드 매니저를 어떻게 설정하는지 알지 못한다. 그러나 이것은 패스에서 그것을 사용하는 방법이다.

private long enqueue; 
private DownloadManager dm; 

public void onClick(View view) { 
    dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
    Request request = new Request(
      Uri.parse("File URL")); 
    enqueue = dm.enqueue(request); 

} 

public void showDownload(View view) { 
    Intent i = new Intent(); 
    i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS); 
    startActivity(i); 
} 
+0

예, 정확하게 사용하고있는 것입니다 : dm = (DownloadManager) getSystemService (DOWNLOAD_SERVICE); DownloadManager.Request request = new DownloadManager.Request (resource); request.setAllowedNetworkTypes (Request.NETWORK_MOBILE); 긴 ID = dm.enqueue (요청); 그리고 똑같은 유형의 방법을 사용하고 있습니다. – azdragon2

+0

나와 함께이 문제를 조사해 주셔서 감사합니다. 모든 것이 내가 지정한 한 DownloadManager에서 제대로 작동합니다. request.setAllowedNetworkTypes (Request.NETWORK_WIFI); 또는 request.setAllowedNetworkTypes (Request.NETWORK_MOBILE | Request.NETWORK_WIFI); 그것은 단지 Request.NETWORK_MOBILE만을 사용하려고 할 때입니다. – azdragon2