0

ステータスバーの通知を作成しました。これにより、ステータスバーにメッセージが表示され、クリックするとまったく新しいレイアウトにリダイレクトされます。ステータスバーコード -

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);

このレイアウトには、クリックすると完了というボタンがあり、データベースの行を削除してfinish()を呼び出しています。コード -

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

この後、通常のメニューからアプリケーションを開くと、ランディング アクティビティではなく、完全なボタンを持つこの同じレイアウトが引き続き表示されます。この活動が終わらないのはなぜですか?

前もって感謝します、 カウシク

4

1 に答える 1

0

Notifications API ガイドの最新の更新をオンラインで確認することをお勧めします。通知を処理するためにアクティビティを起動すると、何が起こるかに驚かれることがあります。これに使用する必要があるオプションについては、ガイドに記載されています。

かなり単純化した要約は、通知によって開始されたアクティビティは別のタスクであるべきだということです。アクティビティがアプリの通常の部分である場合、ユーザーは [最近] を使用して、通知から開始されたタスクにアクセスする必要があります。アクティビティが通知のみに使用される場合は、ユーザーが離れたらタスクを終了する必要があります。

このパターンは、ユーザー エクスペリエンスに関するユーザーの期待を維持します。

あなたの場合、あなたが開始した新しいアクティビティは、TaskAffinity によってアプリに「スタック」したと確信しています。API ガイドは、それを回避する方法を示します。

于 2012-11-05T22:23:37.963 に答える