Android通知意图使用旧上下文
我正在编写一个小的图像上传应用程序,它使用AsyncTask上传并通知用户上传是否完成 上传完成后,我想使用AsyncTask线程中的“onPostExecute”方法更新UI。如果您单击通知,它将引导用户进入主要活动,在那里您可以看到所有上传的图片(也是最新的图片) 为此,我在“onPreExecute”方法中创建通知,并打算返回: 在创建AsyncTask对象时,将传递使用的上下文: 新的ImageUploader(getApplicationContext()).execute((getRealPathFromURI()) 上传完成后,我将更改通知文本并更新UI(目前只有一个TextView进行测试): 这很好,在“onPostExecute”-方法完成后,我的活动中有更新的文本,在栏中有“Upload complete!”通知 现在我的问题开始了:如果我现在单击,我的通知会打开应用程序,但会使用旧的上下文文本/UI。这意味着我更新的UI文本将消失,并替换为旧文本 例如:Android通知意图使用旧上下文,android,android-intent,android-asynctask,notifications,Android,Android Intent,Android Asynctask,Notifications,我正在编写一个小的图像上传应用程序,它使用AsyncTask上传并通知用户上传是否完成 上传完成后,我想使用AsyncTask线程中的“onPostExecute”方法更新UI。如果您单击通知,它将引导用户进入主要活动,在那里您可以看到所有上传的图片(也是最新的图片) 为此,我在“onPreExecute”方法中创建通知,并打算返回: 在创建AsyncTask对象时,将传递使用的上下文: 新的ImageUploader(getApplicationContext()).execute((getR
我的想法:这是因为返回的意图是使用我在更改UI之前设置的“旧”活动上下文。但我不知道如何解决这个问题。更新UI后,是否可以在“onPostExecute”方法中设置Resultent和TaskStackBuilder?我假设在您选择通知时正在创建
MainActivity
的新实例。您可以通过在MainActivity
的onCreate()
中添加一些日志来验证这一点。如果您只想将现有的应用程序放到前台,那么可以查看。我也不知道为什么要使用TaskStackBuilder
,因为您没有构建后台堆栈(包含多个活动)。你可以使用pendingent.getActivity()
来实现这个目的。我会看看你的答案,我对通知不熟悉,所以我使用了使用TaskStackBuilder的google开发者教程。
@Override
protected void onPreExecute() {
mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(context)
.setContentTitle("ImageUpload")
.setContentText("Uploading in progress")
.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setProgress(0, 0, true);
mBuilder.setAutoCancel(true);
Intent resultIntent = new Intent(context, MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
mNotifyManager.notify(NOTIFICATION_ID, mBuilder.build());
}
@Override
protected void onPostExecute(String result) {
if(result == null) {
setNotificationFinshedText("A error occured during the Upload");
} else {
setNotificationFinshedText("Upload complete!");
txt.setText(result);
}
}