0

Ich versuche ein Fragment zu öffnen, wenn eine neue Benachrichtigung empfangen wird. Dazu benutze ich einen BroadcastReceiver. Problem ist, ich bekomme die Nachricht in meiner Aktivität nicht von sendNotification Methode innerhalb FirebaseMessagingService Klasse. Ich denke, das Problem ist, dass ich den IntentFilter innerhalb von onCreate deklariert habe und nicht aufgerufen werde, wenn ich auf die Push-Benachrichtigung klicke. Gibt es einen anderen Weg, dies zu tun?offenes Fragment von Firebase onMessageReceived

// Globally declared 
 
\t private IntentFilter mIntentFilter; 
 
\t 
 
\t @Override 
 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_home); 
 
\t \t 
 
\t \t // Open a fragment automatically 
 
\t \t if (findViewById(R.id.frame) != null) { 
 
      if (savedInstanceState != null) { 
 
       return; 
 
      } 
 

 
      myFragmentManager = getSupportFragmentManager(); 
 
      myFragmentTransaction = myFragmentManager.beginTransaction(); 
 
      myFragmentTransaction.replace(R.id.frame, new ProdList()).commit(); 
 
     } 
 
     
 

 
     mIntentFilter = new IntentFilter(); 
 
     mIntentFilter.addAction("com.sam.CUSTOM_INTENT"); 
 

 

 
    } 
 
\t 
 
\t @Override 
 
    protected void onResume() { 
 
     super.onResume(); 
 
     registerReceiver(mReceiver, mIntentFilter); 
 
    } 
 

 
    @Override 
 
    protected void onPause() { 
 
     super.onPause(); 
 
     unregisterReceiver(mReceiver); 
 
    } 
 
\t 
 
\t private BroadcastReceiver mReceiver = new BroadcastReceiver() { 
 
     @Override 
 
     public void onReceive(Context context, Intent intent) { 
 

 
      if (intent.getAction().equals("com.sam.CUSTOM_INTENT")) { 
 

 
       Toast.makeText(getApplicationContext(), "GOT MESSAGE", Toast.LENGTH_SHORT).show(); 
 
       InventoryList il = new InventoryList(); 
 
       replaceFragment(il,"IL"); 
 
      } 
 
     } 
 
    };
@Override 
 
    public void onMessageReceived(RemoteMessage remoteMessage) {   
 

 
     if (remoteMessage.getData().size() > 0) { 
 
      for (Map.Entry<String, String> entry : remoteMessage.getData().entrySet()) { 
 
       
 
       String value = entry.getValue(); 
 
       
 
       try { 
 
        JSONObject obj = new JSONObject(value); 
 
        
 
        sendNotification(obj.getString("message"),"SUCCESS"); 
 
        
 

 
       } catch (JSONException e) { 
 
        e.printStackTrace(); 
 
       } 
 
      } 
 

 
     } 
 

 

 
    } 
 
\t 
 
\t 
 
\t private void sendNotification(String messageBody, String param) { 
 
     Intent intent = new Intent(this, HomeActivity.class); 
 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
 
\t \t intent.setAction("MESSAGE"); 
 

 
     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.mipmap.ic_com.sam.CUSTOM_INTENTr) 
 
       .setContentTitle("Nika") 
 
       .setContentText(messageBody) 
 
       .setAutoCancel(true) 
 
       .setSound(defaultSoundUri) 
 
       .setContentIntent(pendingIntent); 
 

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

 
     notificationManager.notify(0, notificationBuilder.build()); 
 
    }

+0

Warum haben Sie Broadcast-Empfänger innerhalb von Home-Aktivitäten selbst verwendet? Sie kommen bereits auf HomeActivity, wenn die Benachrichtigung richtig geklickt wird? – Jai

+0

Cuz Ich muss Fragment mit FrameLayout öffnen, die in HomeActivity Layout ist. –

+0

aber Sie ersetzen bereits auf Oncreate-Methode dann was ist der Bedarf von Broadcast-Empfänger? – Jai

Antwort

0

Wenn Sie BroadcastReceiver die Sendung zu erhalten, müssen Sie tatsächlich das Broadcast senden. Setzen Sie diesen Code in Ihre onMessageReceived():

Intent intent = new Intent("com.sam.CUSTOM_INTENT"); 
context.sendBroadcast(intent); 

Dieser Ausschnitt wird die Sendung an alle registrierten BroadcastReceivers mit IntentFilter senden Aktion passende "com.sam.CUSTOM_INTENT".

Mit der aktuellen Implementierung wird Ihre Aktivität also übertragen, wenn sie wieder aufgenommen wird.

+0

Er erreicht immer noch nicht die onReceive-Methode von BroadcastReceiver @Wojciech –

+0

Sind Sie sicher, dass es onMessageReceived-Methode des FcmListenerService erreicht? Ist Aktivität beim Testen im Vordergrund? –

+0

Ja, HomeActivity wird geöffnet, wenn ich auf die Benachrichtigung klicke. Aber BroadcastReceiver nicht erreichen. @ Wojciech –

Verwandte Themen