Android: как получить доступ к AsyncTask из PendingIntent, созданного уведомлением в строке состояния?

Мое приложение запускает 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, чтобы отменить его.

Заранее спасибо!

6
задан Shino 13 June 2012 в 18:43
поделиться