こんにちは私はダウンロードファイルのクラスを持っています。彼は、ダウンロードが終了したときに削除通知を除き、期待どおりに動作します。私は、コードの2つの同一のセクションが実際に異なるものを与えることに注意します。私は今、私は次のような行動を取っていることを意味します:私はファイルをダウンロードし、通知をクリックしてキャンセルすることができます。ダウンロードは中止する必要があります。しかし、ダウンロードが完了するまで待ちます。最初に通知が終了すると、2番目の通知が中止され、最初の通知は永久に通知バーに残ります。私はどこが間違っているのか分かりません。 例コード:ファイルダウンロードの悪い動作の通知android
public class DownloadVkVideoFiles extends AsyncTask<String, Integer, String>{
private static String BROADCAST_ACTION = "com.yourshows.helper.DownloadVkVideoFile.CANCELID";
public DownloadVkVideoFiles(Context c, String title, int taskId) {
this.context = c;
this.notifyId = taskId; //this is unique notification Id
this.BROADCAST_ACTION += String.valueOf(taskId); //broadcast action for pending intent
}
@Override
protected void onPreExecute() {
// execute the status bar notification
createNotification();
super.onPreExecute();
IntentFilter filter = new IntentFilter();
filter.addAction(BROADCAST_ACTION);
context.registerReceiver(receiver, filter); //register Receiver for cancel download file
}
@Override
protected String doInBackground(String... params) { //download file}
@Override
public void onProgressUpdate(Integer... progress) {
notification.contentView.setProgressBar(R.id.progressBar, 100, progress[0], false);
// inform the progress bar of updates in progress
notificationManager.notify(notifyId, notification);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
notificationManager.cancel(notifyId); // close finished notification
unregisterReceiver();
LOG.send(LOG.I, TAG, "Notification finished with ID = " + notifyId);
}
@Override
protected void onCancelled() {
super.onCancelled();
notificationManager.cancel(notifyId);
unregisterReceiver();
LOG.send(LOG.I, TAG, "Notification finished with ID = " + notifyId);
}
}
UPD: createNotification:
public void createNotification() {
notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
Intent notificationIntent = new Intent();
notificationIntent.setAction(BROADCAST_ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, notificationIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.download_notification);
// TODO change to shows title
tickerText = context.getResources().getText(R.string.downloadTitle);
icon = android.R.drawable.stat_sys_download;
time = System.currentTimeMillis();
notification = new Notification(icon, tickerText, time);
notification.flags |= Notification.FLAG_ONGOING_EVENT;
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
contentView.setImageViewResource(R.id.downloadImage, R.drawable.download);
contentView.setTextColor(R.id.title, notification_text_color);
contentView.setFloat(R.id.title, "setTextSize", notification_text_size - 3);
contentView.setTextViewText(R.id.title, title);
contentView.setProgressBar(R.id.progressBar, 100, 0, false);
notification.contentIntent = pendingIntent;
notification.contentView = contentView;
//notificationManager.notify(notifyId, notification);
service.startForeground(notifyId, notification);
}
私は一度に6つのタスクを開始し、すべてが正常にダウンロードされました。しかし問題は、通知バーにある5つの通知がダウンロードタスクであっても終了したことです。 – Mrusful
私は5つのファイルをダウンロードしようとしましたが、それぞれ約5 MBのファイルが破損していました。 作成通知機能を追加してください。 – Basbous
私の更新を参照してください。私もダメージファイルを持っていましたが、それは私の失敗です。私は同じ名前のファイルがあったときに起こった。ファイルが互いに上書きされました。とにかく私は本当にあなたが提案したようなこの機能をより良くするだろうと思う。それは私の問題を避けることができます。 – Mrusful