2013-04-08 2 views
1

다음과 같은 오류에서 얻기 안드로이드 매니페스트에 너무

DownloadManager.Request request = new DownloadManager.Request(uri) 
      .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE) 
      .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI) 
      .setAllowedOverRoaming(true) 
      .setDestinationInExternalFilesDir(this, null,String.valueOf(mPathAndFolder)) 
      .setVisibleInDownloadsUi(false) 
      .setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN); 


long downloadID = downloadManager.enqueue(request); 

추가처럼

<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/> 

을 다음과 같은 권한을 DownloadManager를 사용하려고 런타임

java.lang.NoSuchMethodError: android.app.DownloadManager$Request.setNotificationVisibility

왜이 오류가 발생합니까? DownloadManager를 작동시키는 방법은 무엇입니까?

+2

코드를 실행하는 API 버전은 무엇입니까? –

+1

동의 함. 'setNotificationVisibility()'는 API 레벨 9에서 다시 작동하지만, API 레벨 11에서는 새로운 것입니다. – CommonsWare

+0

@CommonsWare 2.3.6에서 실행 중입니다. API 9와 API 11에 두 개의 별도 DownloadManager.Request를 사용해야합니까? –

답변

3

Do I need to use two separate DownloadManager.Request one for API 9 and another for API 11?

아니,하지만 당신은 자바 가드 블록 사용해야합니까 :

DownloadManager.Request request = new DownloadManager.Request(uri) 
     .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE) 
     .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI) 
     .setAllowedOverRoaming(true) 
     .setDestinationInExternalFilesDir(this, null,String.valueOf(mPathAndFolder)) 
     .setVisibleInDownloadsUi(false); 

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) { 
     request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN); 
} 

를 그리고, 당신이 당신의 다운로드가 API 레벨 9, 10 개 장치를 볼 수 있다는 사실에 만족해야 할 것이다 .

+2

더 이상 사용되지 않는 메소드'setShowRunningNotification (boolean show)'를 API 레벨 9 및 10에서 ** 표시되지 않도록 ** 사용할 수 있습니까? –

+0

@codingcrow : 오, 그래, 그게 효과가있다 - 그걸 알아 채지 못해서 미안. – CommonsWare

1

NoSuchMethodError는 해당 장치의 API에서 사용할 수없는 방법을 사용할 때 발생합니다. Android 최신 버전을 실행하는 에뮬레이터에서 코드를 실행하여 테스트 할 수 있습니다. 당신은 여전히 ​​새로운 메소드를 유지할 수 있지만 try 문에 넣어야한다. NoSuchMethodError를 얻으면 코드가 이전 장치에서 실행되고 catch 문에 해결 방법을 사용해야합니다.

+0

아이러니, 정답으로 하나만 받아 들일 수 있습니다. –

+0

괜찮습니다. 제 대답은 좀 더 일반적인 충고였습니다. 그의 조언은 매우 구체적이었습니다. –