1

そのようにDownloadManagerを使用しようとしています

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

Android マニフェストに次の権限を追加しました

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

実行時に次のエラーが発生する

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

なぜこのエラーですか?DownloadManager を機能させるには?

4

2 に答える 2

3

API 9 用と API 11 用に 2 つの別個の DownloadManager.Request を使用する必要がありますか?

いいえ。ただし、Java ガード ブロックを使用する必要があります。

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 デバイスで表示されるという事実に同意する必要があります。

于 2013-04-08T20:20:07.670 に答える
1

NoSuchMethodError は、そのデバイスの API で使用できないメソッドを使用している場合に発生します。最新バージョンの Android を実行しているエミュレーターでコードを実行することにより、これが当てはまるかどうかをテストできます。新しいメソッドをそのまま使用することもできます (おそらく使用する必要があります) が、それを try ステートメントに入れます。NoSuchMethodError が発生した場合、コードは古いデバイスで実行されているため、catch ステートメントで回避策を使用する必要があります。

于 2013-04-08T20:22:41.253 に答える