タスクと通知を使用して、AsyncTask でこのチュートリアルを使用しています: https://eliasbland.wordpress.com/2011/03/11/an-example-of-how-to-run-a-background-task-and -report-progress-in-the-status-bar-using-asynctask-on-android/
私が混乱しているのは、コールバックが呼び出された元のクラスでコールバックに何かをさせる方法です。最適には、次のようなものがあれば素晴らしいでしょう:
private class DownloaderTask extends AsyncTask {
doInBackground() { ... download the file ... }
onProgressUpdate, onPreExecute, etc. from the example, managing a notification.
notificationClicked() {
if (success) {
//show file
} else {
cancel(true);
}
}
ただし、それを開いたクラスの関数を呼び出すのではなく、新しいインテントを開くために PendingIntent が作成されているようです。これを行う方法はありますか?
編集:わかりました、保留中の意図から呼び出し元のサービスを呼び出す方法を見つけました:
Intent returnIntent = new Intent(_context,DownloadService.class);
returnIntent.putExtra("url", _url);
returnIntent.putExtra("name",_title);
notificationIntent = PendingIntent.getService(_context, 0, returnIntent, 0);
notification.setLatestEventInfo(_context, _title, _url, notificationIntent);
実行中のサービスは常に 1 つだけであるため、DownloadService にはすべての AsyncTask の ArrayList があり、onStart はそれらの 1 つが同じ URL とタイトルを持っているかどうかを確認し、同じ場合は AsyncTask のメソッドを呼び出して実行中の項目をキャンセルするか、アクションを実行します。完成品について。
ArrayList のカウントは新しい DownloaderTasks の ID として送信されるため、それぞれに通知を作成するための一意の ID がありますが、ステータス ドロップダウンで通知を選択すると、間違った URL で DownloadService が呼び出されることがあることに気付きました。とタイトルは、別の通知の ID を使用しているようなものですか? これはどのように修正できますか?