1

DownloadManagerを使用してURLからxmlファイルをダウンロードしています。正常に動作しますが、2つの質問があります。

1.)閉じた通知バーにダウンロードに関するメッセージを表示するにはどうすればよいですか?このスナップショットに示すように、バーを開くとメッセージを表示できます。NotificationBar

2.)プログラムで通知を削除するにはどうすればよいですか?

DownloadManagerの私のコード:

            //Download XML file from URL 
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(URL));
        request.setTitle("Download von "+Name+".xml");
        request.setDescription("Download von "+Name+".xml");

        // in order for this if to run, you must use the android 3.2 to compile your app
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            request.allowScanningByMediaScanner();
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        }

        request.setDestinationInExternalPublicDir(FileSeperator+"XML"+FileSeperator, Name + FileExtension);

        // get download service and enqueue file
        DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
        manager.enqueue(request);  
4

4 に答える 4

3

DownloadManagerAPIは、remove(long... ids)ダウンロードしたファイルをファイルシステムから削除できるメソッドを 提供します。remove()ファイルシステムとダウンロードマネージャーアプリのダウンロードファイルのリストの両方からファイルを削除します。また、進行状況通知をシステム通知ドロワーから削除します。リクエストをキューに入れたときに受け取ったIDを渡すだけです。

少し意外かもしれませんが、完了通知もある可能性があります。ダウンロードが正常に完了すると、ダウンロード要求IDを使用して呼び出しても、DownloadManagerは完了通知を削除しません。remove()

ユーザーがダウンロードマネージャーアプリからファイルを削除しても、システム通知ドロワーから進行状況通知のみが削除されますが、完了通知は保持されます。また、ユーザーがアプリを手動で削除した場合、またはプログラムで(を介してremove())ダウンロードを削除した場合、通知によってOSがクラッシュし、「残念ながら、プロセスandroid.process.mediaが停止しました」というレポートが表示されます。 これはAndroidのバグのようです。

アプリではなく完了通知を所有しているため、 NotificationManagerAPIでさえ役に立ちません。したがって、効果はありません。DownloadManagercancelAll()

結論:完了通知が必要ない場合はsetNotificationVisibility()、値を使用してリクエストを呼び出さないでくださいVISIBILITY_VISIBLE_NOTIFY_COMPLETED。デフォルトの可視性はVISIBILITY_VISIBLEで、進行状況の通知のみが表示されます。そして、私が説明したように、その進行状況の通知は自動的に消えます。

通知を完全に制御したい場合は、使用するリクエストを設定できますVISIBILITY_HIDDEN(これには権限が必要android.permission.DOWNLOAD_WITHOUT_NOTIFICATIONです)。そして、NotificationManagerAPIを使用して通常の方法で任意のカスタム通知を表示できます。

私のアプリでは、jarファイルをダウンロードし、その内容を抽出してjarファイルを削除するため、VISIBILITY_VISIBLE(完了通知なしで)解決しました。リクエストを作成する方法は次のとおりです。

Request request = new Request(baseUrl + destinationFile))
            .setDescription("file description")
            .setDestinationInExternalFilesDir(mContext, null, destinationFile)
            .setNotificationVisibility(Request.VISIBILITY_VISIBLE)
            .setVisibleInDownloadsUi(true)
            .setTitle("My App Title");
于 2014-07-19T17:23:38.333 に答える
1

はい、ダウンロードが完了したときに通知を表示できます。あなたもそれを削除することができます。この投稿をフォローするAndroidで通知をプログラムで開閉するにはどうすればよいですか?

于 2012-10-09T10:09:05.197 に答える
0

broadcastReceiverのonReceiveメソッドで以下の関数を使用できます


downloadManager.addCompletedDownload(YOUR_TITLE、YOUR_DESCRIPTION、true、YOUR_MIMETYPE、downloadedFile.getPath()、downloadedFile.getTotalSpace()、false);


このようなBroadcastReceiver:

registerReceiver(broadcastReceiver、new IntentFilter( "android.intent.action.DOWNLOAD_COMPLETE"));


最後のパラメータを「true」に設定すると、ダウンロードが完了すると通知が表示されます。「false」に設定されている場合、通知はダウンロード中にのみ表示され、ダウンロードが完了して通知が自動的にキャンセルされた場合

于 2015-08-13T12:51:18.080 に答える
-1

通知の概要。メソッドnotify。メソッドキャンセル

于 2012-10-09T10:21:59.160 に答える