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); 
相關問題