2

通知をクリックすると、アプリが開いて通知がクリックされたときにのみ、指定されたアクティビティが開始されます。アプリがバックグラウンド/実行中でなく、通知クリックが実行されると、アプリケーションのMainActivityが開きます。要するに、PendingIntentで指定されたアクティビティを開くのではなく、アクティビティスタックに続いてアプリケーションが正常に開くようなものです。アプリがバックグラウンド/実行中でないときに通知のクリックをクリックしない

通知のクリックを、そのタイプに基づいて2つの異なるアクティビティ(ApprovalDetailActivityとConversationDetailActivity)にリダイレクトするとします。

私はプッシュ通知にFCMを使用しています。マニフェストファイルとFCMListenerファイルをここに貼り付けています。私を助けてください。 MyFirebaseMessagingService.javaで

sendNotificationを()機能

private void sendNotification(String messageBody) 
    { 
     Intent intent; 
     System.out.println("----message body: " + messageBody); 
     if(notificationBundle.getCategory().equalsIgnoreCase(Master.KEY_PUSH_NOTIFICATION_CONVERSATION)) 
     { 
      intent = new Intent(this, ConversationDetailActivity.class); 
      /*Conversation conversation = Master.notificationBundle.getConversation(); 
      Master.conversationsList = new ArrayList<>(); 
      Master.conversationsList.add(conversation);*/ 
     } 
     else 
     { 
      intent = new Intent(this, ApprovalDetailActivity.class); 
      if(notificationBundle.getApprovalType().equals("I")) 
       intent.putExtra(Master.KEY_WHICH_APPROVAL, Master.KEY_VERIFICATIONS); 
      else if(notificationBundle.getApprovalType().equals("A")) 
       intent.putExtra(Master.KEY_WHICH_APPROVAL, Master.KEY_APPROVALS); 
      else 
       intent.putExtra(Master.KEY_WHICH_APPROVAL, Master.KEY_COMPLETED); 

      intent.putExtra(Master.KEY_IS_FROM_CONVERSATION, false); 
     } 

     intent.putExtra(Master.KEY_PUSH_NOTIFICATION_POST_ID , notificationBundle.getPostID()); 
     intent.putExtra(Master.KEY_IS_FROM_PUSH_NOTIFICATION, true); 
     intent.putExtra(Master.KEY_POSITION, 0); 

     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 
       PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.mnet_icon) 
       .setContentTitle(getString(R.string.app_name)) 
       .setContentText(messageBody) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

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

     int random = (int) ((new Date().getTime()/1000L) % Integer.MAX_VALUE); 
     notificationManager.notify(random, notificationBuilder.build()); 
    } 

のAndroidManifest.xml Firebaseクラウドメッセージングドキュメント-もし活動がフォアグラウンドで、その後onMessageReceivedが呼び出されますですにつきよう

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="mnet.mediaware.com.m_net"> 

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

    <application 
     android:name=".MnetApplication" 
     android:allowBackup="true" 
     android:icon="@drawable/mnet_icon" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".activities.LoginActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/app_name" 
      android:launchMode="singleTask" 
      android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".activities.MainActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_main" 
      android:launchMode="singleTask" 
      android:theme="@style/AppTheme.NoActionBar" /> 

     <activity 
      android:name=".activities.ConversationDetailActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_conversation_detail" 
      android:parentActivityName=".activities.MainActivity" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:launchMode="singleTask" 
      android:windowSoftInputMode="stateHidden|adjustResize"> 
      <intent-filter> 
       <action android:name="mnet.mediaware.com.m_net.activities.ConversationDetailActivity" /> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:scheme="http" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="mnet.mediaware.com.m_net.activities.MainActivity" /> 
     </activity> 
     <activity 
      android:name=".activities.ApprovalDetailActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_approval_detail" 
      android:parentActivityName=".activities.MainActivity" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="stateHidden|adjustResize"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="mnet.mediaware.com.m_net.activities.MainActivity" /> 
     </activity> 
     <activity 
      android:name=".activities.NewConversationActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_new_conversation" 
      android:parentActivityName=".activities.MainActivity" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="stateHidden|adjustResize"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="mnet.mediaware.com.m_net.activities.MainActivity" /> 
     </activity> 
     <activity 
      android:name=".activities.NotificationActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_notification" 
      android:parentActivityName=".activities.MainActivity" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="stateHidden|adjustResize"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="mnet.mediaware.com.m_net.activities.MainActivity" /> 
     </activity> 
     <activity 
      android:name=".activities.ProfileActivity" 
      android:label="@string/title_activity_profile" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:parentActivityName=".activities.MainActivity" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="mnet.mediaware.com.m_net.activities.MainActivity" /> 
     </activity> 

     <service 
      android:name=".utils.firebase.MyFirebaseMessagingService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
      </intent-filter> 
     </service> 

     <service 
      android:name=".utils.firebase.MyFirebaseInstanceIDService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
      </intent-filter> 
     </service> 

    </application> 

</manifest> 
+0

'PendingIntent.FLAG_UPDATE_CURRENT'があなたの活動にあなたを着陸する予定。フラグを使用してPendingIntent.FLAG_UPDATE_CURRENT –

+1

を使用 コーディングバディを保持;)hahaahaha – buzzingsilently

答えて

3

。アクティビティがバックグラウンドであるか閉じている場合は、アプリランチャアクティビティの通知センターに通知メッセージが表示されます。 For More information Check this link

+0

ランチャーアクティビティ(LoginActivity)の意図には、エクストラがあります。しかし、このアクティビティからConversationDetailActivityを起動しているとき(FCMエキストラが存在する場合)、startActivity()関数は何もしません。したがって、ConversationDetailActivityは開かれていません。理由は何でしょうか? – backslashN

+0

このフラグをインテントに追加しましたか? intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); –

+0

はい私もこれを試したが、それは役に立たなかった。私はこの問題の別の質問を掲載しました。ここで答えてください:[リンク](http://stackoverflow.com/questions/40842313/startactivity-does-nothing-even-when-the-intent-is-specified-correctly) – backslashN

0

ランチャーアクティビティのインテントからバンドル(プッシュ通知データペイロード用)を取得し、特定のアクティビティを開始します。

0

私はあなたのために正確な答えを得たと思います。

TaskStackBuilder Usage and Definition

上記のリンクに素晴らしいビデオを見落とさないようにしてください。

TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(getContext()); 
taskStackBuilder.addNextIntentWithParentStack(intent); 
PendingIntent pendingIntent = taskStackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
関連する問題