Мое приложение запускает AsyncTask
, которая загружает файл с URL-адреса. В то же время он создает строку состояния Уведомление
, которая сообщает пользователю процент завершения загрузки.
Я пытаюсь заставить свое приложение реагировать на щелчок по уведомлению.
Если загрузка все еще продолжается, я хочу показать DialogInterface
, который спрашивает их, хотят ли они остановить загрузку. Нажатие «Да» должно остановить загрузку.
Проблема, с которой я столкнулся, заключается в том, что я не уверен, как получить доступ к своей асинхронной задаче из PendingIntent
, который я настроил для уведомления. Я могу заставить DialogInterface
отображаться достаточно легко, но я не уверен, как показать активность, которая происходит, когда загрузка должна остановить ее.
Я попытался создать класс Helper, который имел бы доступ к уведомлению, а также к объекту File, ссылающемуся на загружаемый файл, но получаю сообщение об ошибке, говорящее о том, что объект не сериализуем (он реализует Serializable
). Вспомогательный класс также включает член, который будет хранить ход загрузки, который я бы использовал для условия, показывать ли диалоговое окно или нет.
Я думал об использовании Broadcast Action и приемника, но я не уверен, куда поместить приемник.Пойдет ли он в класс, расширяющий AsyncTask
?
Будем признательны за любую помощь.
Это PendingIntent
, прикрепленный к Notification
. Если вы хотите увидеть больше кода, просто спросите.
public class DownloadNotificationActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
Intent i = getIntent();
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick( DialogInterface dialog, int which ) {
switch ( which ) {
case DialogInterface.BUTTON_POSITIVE :
// Yes button clicked
// Stop download
finish();
break;
case DialogInterface.BUTTON_NEGATIVE :
// No button clicked
finish();
break;
}
}
};
if ( /* download not complete */ ) {
AlertDialog.Builder builder = new AlertDialog.Builder( this );
builder.setMessage( R.string.stop_download ).
setPositiveButton( R.string.yes, dialogClickListener ).
setNegativeButton( R.string.no, dialogClickListener ).show();
}
else {
// Access file
}
}
}
Чтобы было ясно, у меня есть класс ViewDetailActivity
. Он имеет внутренний класс с именем DownloadFile
, который расширяет AsyncTask
и выполняется, когда пользователь нажимает кнопку на экране. В методе doInBackground()
метода DownloadFile
загрузка mp3 начинается с URL-адреса, а строка состояния Notification
создается и обновляется в зависимости от количества загружаемого файла. PendingIntent
для Notification
создается с помощью DownloadNotificationActivity
(показан код), и он должен отображать диалоговое окно, которое при выборе «Да» должно отменить загрузить в AsyncTask
.
Моя проблема заключается в том, что мне нужно сообщить задаче DownloadFile
о том, что загрузка была отменена, и я не знаю, как получить доступ к DownloadFile
из . ] DownloadNotificationActivity
, чтобы отменить его.
Заранее спасибо!