因此,我有一个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中进行检查,并采取适当的措施。

09-20 21:25