2

只有当应用程序打开并执行通知单击时,通知单击才会启动指定的活动。如果应用程序处于后台/未运行状态并执行通知单击,则应用程序的MainActivity将打开。简而言之,它就像应用程序在活动堆栈后正常打开,而不是在PendingIntent中打开指定的活动。当应用程序处于后台/未运行时,不会打开通知时的特定活动

我想根据它们的类型将通知点击重定向到两个不同的活动(ApprovalDetailActivity和ConversationDetailActivity)。

我正在使用FCM进行推送通知。我在这里粘贴我的Manifest文件和我的FCMListener文件。请帮助我。

sendNotification的()功能MyFirebaseMessagingService.java

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中

<?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 –

+1

标志使用'PendingIntent.FLAG_UPDATE_CURRENT'将登陆你到你的活动。 保持编码伙伴;)hahaahaha – buzzingsilently

回答

3

按照火力地堡云端通讯文件,如果活动是在前台,然后onMessageReceived将调用。如果活动处于后台或关闭状态,则会在通知中心显示通知消息以显示应用启动器活动。 For More information Check this link

+0

Launcher Activity(LoginActivity)的意图有Extras。但是,当我从此Activity启动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); 
相关问题