因此,我有一个asynctask,它处理上传到服务器的操作,同时调用notificationhelper类来更新通知栏,以显示当前的上传百分比。这一部分工作得很好,唯一的问题是让操作正常工作,并且能够使用操作发送的意图(最近的一次尝试是在父活动中使用广播管理器,但我从未得到消息)。如果有人能给我指出正确的方向,我将不胜感激。
下面是一些代码:
mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent("com.example.sibmedemo.sibme");
intent.putExtra("message","pause");
PendingIntent pIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
mBuilder = new Notification.Builder(mContext)
.setContentTitle("Upload File")
.setContentText("Upload in progress")
.setSmallIcon(R.drawable.ic_launcher)
.addAction(R.drawable.ic_launcher,"Pause",pIntent)
.addAction(R.drawable.ic_launcher,"Cancel",pIntent);
mBuilder.setProgress(100,0,false);
mNotificationManager.notify(0,mBuilder.build());
我认为我的主要问题是我不正确地理解PendingTents是如何工作的,或者它们是如何在Android活动中交换的,对这个问题的任何澄清都会有帮助。
----使用解决方案后的工作代码-------
主要活动-------
public class FileUploadActivityV2 extends Activity {
public static int flags = 0;
public BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("message", "got a message");
if(intent.getStringExtra("message").equalsIgnoreCase("pause"))
flags = 1;
goAsync();
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_upload_activity_v2);
registerReceiver(receiver, new IntentFilter("sibme"));
flags = 0;
(new UploadTask(this)).execute();
}
是的,我知道我会处理好Brodcastreceiver的生命周期,但到目前为止,这是可以接受的测试。对于任何想知道的人来说,goasync()函数是android api的一部分,只是声明一旦接收者调用了onreceive函数,就可以在将来回收接收者,以便再次使用它。
在异步任务类中-----
@Override
protected Long doInBackground(Integer... integers) {
while(FileUploadActivityV2.flags == 0)
{
try{
Thread.sleep(1000);
Log.i("Running", "Running in background");
}catch(Exception e){
}
}
return null;
}
通知帮助程序类内部----
public void createNotification() {
mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent("sibme");
intent.putExtra("message","pause");
PendingIntent pIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
mBuilder = new Notification.Builder(mContext)
.setContentTitle("Upload File")
.setContentText("Upload in progress")
.setSmallIcon(R.drawable.ic_launcher)
.addAction(R.drawable.ic_launcher,"Pause",pIntent)
.addAction(R.drawable.ic_launcher,"Cancel",pIntent);
mBuilder.setProgress(100,0,false);
mNotificationManager.notify(0,mBuilder.build());
}
最佳答案
要与在后台工作的asynctask进行交互,您可以在publishprogress()中进行交互(我从未尝试过)。否则你只需要在执行前和执行后。如果不是这样,我唯一能想到的是一个类int变量,它的值根据用户单击的按钮而改变。然后可以在doinbackground中进行检查,并采取适当的措施。