2017-02-08 19 views
0

通知を作成する必要があり、以下のコードで正常に動作しています。通知をクリックすると、アクティビティにリダイレクトされます(たとえば、activity2)。私はこのアクティビティ2を他のアクティビティやフラグメント、例えばactivity1、fragment1などから入力することができます。アプリケーションに滞在して通知をクリックすると、アクティビティ2にリダイレクトされ、戻るボタンを押すと前のアクティビティまたはフラグメントに移動します。しかし、アプリケーションを終了して通知をクリックすると、アクティビティ2が開きますが、戻るボタンを押すとアプリは終了します。私はそれをactivity1にリダイレクトする必要があります。私はどうすればそれをすることができます。 ありがとうございます。アプリケーションが終了したときに通知からアクティビティを起動中にアプリケーションが終了する

void createDownloadNotification(String title) { 
    if (title != null) { 
     Intent intent = new Intent(context, SecondActivity.class); 
     intent.putExtra(EXTRA_STRING, title); 
     intent.putExtra("id", i); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     PendingIntent pIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), intent, 0); 




     Notification myNotification = new Notification.Builder(context) 
       .setContentTitle(title) 
       .setContentText("Some text....") 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentIntent(pIntent) 
       .setAutoCancel(false).build(); 


     NotificationManager notificationManager = 
       (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE); 

     notificationManager.notify(i + 1, myNotification); 
     i = i + 1; 

    } 
} 

答えて

0

基本的にはマニフェストファイルでセットアップ親アクティビティに必要とあなたの結果の活動のためのスタックを作成するマニフェスト

<activity 
    android:name="com.example.myfirstapp.DisplayMessageActivity" 
    android:label="@string/title_activity_display_message" 
    android:parentActivityName="com.example.myfirstapp.MainActivity" > 
    <!-- Parent activity meta-data to support 4.0 and lower --> 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="com.example.myfirstapp.MainActivity" /> 
</activity> 
0

にこのコードを試してみてください。」

ここではあなたの仕事を始めるには非常に良いtutorialです。

0
それは、ここで定義に従って働いている

FLAG_ACTIVITY_CLEAR_TOP設定、および起動され活動がすでに、現在のタスクで実行中の代わりに、そのアクティビティの新しいインスタンスを起動している場合

、すべてのその上にある他のアクティビティは閉じられ、このインテントは新しいインテントとしての古いアクティビティに配信されます。

あなたは、通知のためにあなたのPendingIntentに入れ意図は、開いているすべてのActivitiesを閉じ、SecondActivityを開きます。そのフラグをIntentから削除すると、他のフラグは閉じられません。

さらにSecondActivityに親のActivityを追加して、通知がクリックされる前にユーザーが押して何も開いていないときにどこに行くかを知ることができます。

0

現在の実装とintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);の部分では、問題は設計上問題になります。 tasks and backstacksを理解するとそれが説明されます。

onBackPressedの条件でアクティビティを起動し、アクティビティが存在しない場合に再作成中に通知から到着するたびに検出します。

activity launch modesを経由すると役立ちます。あなたの実装にはactivity1でそれを使うことができます。

Understand android activity launchmodeは良いブログ記事ですが、この回答にはアンドロイド以外の唯一の開発者のリンクがあります。

0

簡単な方法

その後、ブール値偽

を渡し、その後開いているアクティビティからブール真

を渡すあなたが通知からactivity2

を取得するために使用する意思を経由してブール値を渡しますアクティビティ2でブール値を取得し、それに応じて設定します。

アクティビティ2のBackPressedをこのように設定したもの

@Override 
    public void onBackPressed() { 
     if (fromNotification) { 
      Intent i = new Intent(Activity2.this, 
        Activity1.class); 
      startActivity(i); 
      finish(); 
     } else 
      super.onBackPressed(); 
    } 
関連する問題