【发布时间】:2012-06-12 17:27:43
【问题描述】:
我的应用程序启动一个AsyncTask,它从一个 URL 下载一个文件。同时它会创建一个状态栏Notification,告诉用户下载完成的百分比。
我正在尝试让我的应用程序响应单击通知。
如果下载仍在进行中,我想显示DialogInterface,询问他们是否要停止下载。点击是应该会停止下载。
我遇到的问题是我不确定如何从我为通知设置的PendingIntent 访问我的异步任务。我可以让DialogInterface 显示足够简单,但我不确定如何显示正在停止下载的活动。
我尝试创建一个可以访问通知的 Helper 类以及引用可下载文件的 File 对象,但我收到一条错误消息,指出该对象不可序列化(它确实实现了 Serializable)。帮助程序类还包括一个成员,该成员将保存下载进度,这是我将用于是否显示对话框的条件。
我正在考虑使用 Brodcast Action 和接收器,但我不确定将接收器放在哪里。它会进入扩展AsyncTask 的类吗?
任何帮助将不胜感激。
这是附加到Notification 的PendingIntent。如果您想查看更多代码,请询问。
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,并在用户单击屏幕上的按钮时执行。在DownloadFile 的doInBackground() 方法中,从URL 开始下载mp3,并根据下载的文件量创建和更新状态栏Notification。 Notification 的PendingIntent 是用DownloadNotificationActivity 创建的(代码所示),它应该显示一个对话框,选择“是”,应该取消AsyncTask 中的下载。
我的问题是我需要回复DownloadFile 任务已取消下载,但我不确定如何从DownloadNotificationActivity 访问DownloadFile 才能取消它。
提前致谢!
【问题讨论】:
标签: android android-asynctask status android-notification-bar android-pendingintent