15

クラスを使用して、DownloadManagerプログラムでファイルをダウンロードしています。すべて正常に動作しますが、ダウンロード完了通知を持続させることができません。ダウンロードが完了するとすぐに消えます。これが私のコードです:

Request rqtRequest = new Request(Uri.parse(((URI) vewView.getTag()).toString()));
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
    rqtRequest.setShowRunningNotification(true);  
} else {
    rqtRequest.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
((DownloadManager) getSystemService(DOWNLOAD_SERVICE)).enqueue(rqtRequest);

これに関連するいくつかの質問を Web で見ましたが、解決策が見つかりませんでした。

4

4 に答える 4

16

DownloadManagerGingerbread では完了通知をサポートしていません。自分で表示する必要があります。

BroadcastReceiver を使用してダウンロードの完了を検出し、独自の通知を表示します。

public class DownloadBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
            //Show a notification
        }
    }
}

マニフェストに登録します。

<receiver android:name="com.zolmo.twentymm.receivers.DownloadBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
    </intent-filter>
</receiver>

また、setNotificationVisibilityICS ではなく API レベル 11 (Honeycomb) で追加されました。ICS定数の使用が意図的かどうかはわかりませんが、コードを次のように変更して、Honeycombでもシステム通知を使用できます。

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    rqtRequest.setShowRunningNotification(true);  
} else {
    rqtRequest.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
于 2012-12-11T16:28:37.373 に答える
2

Gingerbread の独自のダウンロード完了通知を作成する必要があります。

最初に、次の場所からダウンロードへの参照を取得しますDownloadManager

DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
DownloadManager.Request request = new Request(someUri); 
//...
long downloadReference = downloadManager.enqueue(request);

次に、カスタムでダウンロード完了ブロードキャストをリッスンしますBroacastReceiver

IntentFilter filter = new IntentFilter( DownloadManager.ACTION_DOWNLOAD_COMPLETE);

BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override public void onReceive( Context context, Intent intent) { 
      long reference = intent.getLongExtra( DownloadManager.EXTRA_DOWNLOAD_ID, -1); 
       if (downloadReference == reference) { 
                // Send your own notification
        } 
     } 
}; 

registerReceiver( receiver, filter);

独自のダウンロード完了通知を送信します。

于 2012-12-12T01:56:14.673 に答える
0

多分それは大まかな (しかし単純な) 方法です: ダウンロードが完了した後に新しい通知を作成することを好むかもしれません PS:ああ、申し訳ありませんが、実際には「なぜ」という質問に対する答えではありませんが、それでも役立つかもしれませんあなた

于 2012-12-11T10:56:20.527 に答える
0

さて、どのバージョンでテストしていますか? VISIBILITY_VISIBLE_NOTIFY_COMPLETED を設定すると、ダウンロードが完了したときにのみ表示されるように通知を設定する必要があります。ダウンロード中に通知が表示される場合は、ICS より前のプラットフォームで実行していると想定する必要があります。アプリをデバッグします。ブレークポイントを設定して、どの「if」選択が実行されているかを確認します。

于 2012-11-12T20:24:27.283 に答える