【发布时间】:2014-03-02 07:38:30
【问题描述】:
所以我有一个 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());
我认为我的主要问题是我没有正确理解pendingIntents 是如何工作的,或者它们是如何在android Activity 中交换的,对此问题的任何澄清都会有所帮助。
--------使用解决方案后的工作代码----------- 主要活动-----------
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 函数,就可以回收接收器以备将来使用。
在 AsyncTask 类中---------
@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());
}
【问题讨论】:
-
你在哪里设置 contentintent?
-
我不确定您所说的内容意图是什么意思。
-
那么,您希望能够从通知中取消或暂停您的异步任务,对吧?
-
你为什么使用getActivity?当你想开始一个新的活动时使用它。如果您想在单击按钮时发送广播,请使用 getBroadcast。
标签: android android-asynctask broadcastreceiver android-notifications android-pendingintent