从状态栏打开的活动未完成

时间:2012-11-05 17:46:13

标签: android android-intent android-notifications

我创建了一个状态栏通知,它会在状态栏上显示一些消息,当点击它时会重定向到一个全新的布局。 状态条形码 -

NotificationManager mgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
         Intent notificationIntent = new Intent(this, TaskCompleteActivity.class);
         notificationIntent.putExtra(TasksDBAdapter.KEY_ROWID, rowId);
         notificationIntent.putExtra(TasksDBAdapter.KEY_TITLE, taskTitle);
         notificationIntent.putExtra(TasksDBAdapter.KEY_BODY, taskDesc);
         //notificationIntent.putExtra("NotificationId", );

         Log.i(TAG,"rowId in doReminderWork" + rowId);
         PendingIntent pi = PendingIntent.getActivity(this, 0, notificationIntent,PendingIntent.FLAG_ONE_SHOT);  


         Notification note=new Notification(android.R.drawable.stat_sys_warning,taskDesc,System.currentTimeMillis());                              
         note.setLatestEventInfo(this, taskTitle,taskDesc, pi);
         note.defaults |= Notification.FLAG_AUTO_CANCEL;
         note.defaults |= Notification.DEFAULT_SOUND;   
         note.defaults |= Notification.DEFAULT_VIBRATE; 
         // you need to clear the notification on click of status bar notification //
         note.flags |= Notification.FLAG_NO_CLEAR;                              
         // An issue could occur if user ever enters over 2,147,483,647 tasks. (Max int
         // value). 
         // I highly doubt this will ever happen. But is good to note. 
         int id = (int)((long)rowId);                                              
         mgr.notify(id, note);

这个布局有一个名为Complete的按钮,我将删除数据库中的一行并调用finish()。代码 -

public void completeTask(){
        taskDBAdapter.deleteReminder(rowId);
        this.finish();
    }

在此之后,如果我从普通菜单打开我的应用程序,它仍然会向我显示具有完整按钮的相同布局,而不是我的登陆活动。为什么这项活动没有完成?

先谢谢, 考希克

1 个答案:

答案 0 :(得分:0)

我建议您在线查看Notifications API指南的最新更新。人们有时会惊讶于他们发起活动来处理通知时会发生什么。您应该使用的选项在指南中进行了描述。

一个相当简单的总结是,通知启动的活动应该是一项单独的任务。如果“活动”是应用程序的正常部分,则用户应使用“最近”来访问从通知启动的任务。如果“活动”仅用于通知,则应在用户离开后完成任务。

此模式保留了用户对用户体验的期望。

在你的情况下,我很确定你开始的新活动被TaskAffinity“卡住”了你的应用程序。 API指南将向您展示如何解决这个问题。