2017-03-29 1 views
1

heute musste ich lösen, wie die Aktivität beim Empfang einer Nachricht vom Service FCM automatisch gestartet wird.Starten Sie die Aktivität beim Empfang einer Nachricht vom Dienst FCM?

Ich habe eine Funktionsaufrufaktivität gemacht und konnte nur dann aufgerufen werden, wenn der Benutzer die Anwendung nur öffnet. Es kann jedoch nicht angerufen werden, wenn sich das Smartphone im Status Sperrbildschirm, Startbildschirm befindet oder der Benutzer eine andere Anwendung öffnet.

Dieser Teil meines Codes ist:

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

     private static final String TAG = "MyFirebaseMsgService"; 

     @Override 
     public void onMessageReceived (RemoteMessage remoteMessage) { 
         Bundle args = new Bundle(); 
         Intent intent = new Intent (this, ProgressOrderActivity.class); 
         intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); 
         intent.putExtras (args); 
         startActivity (intent); 
     } 

} 

SO, wie es zu lösen?

+0

'öffentliche Klasse erweitert MyFirebaseMessagingService FirebaseMessagingService' Sind Sie sicher, dass Ihr Dienst sein wird namens? –

+0

Möchten Sie eine Benachrichtigung für dasselbe oder nicht anzeigen? – MadScientist

+0

[das könnte Ihnen helfen] (http://StackOverflow.com/a/41383507/3800164) überprüfen Sie diese –

Antwort

-1

Das ist mein MyFirebaseMessagingService Klasse ist, können Sie es verwenden

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

    private static final String TAG = MyFirebaseMessagingService.class.getSimpleName(); 

    private NotificationUtils notificationUtils; 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     Log.e(TAG, "From: " + remoteMessage.getFrom()); 

     if (remoteMessage == null) 
      return; 

     // Check if message contains a notification payload. 
     if (remoteMessage.getNotification() != null) { 
      Log.e(TAG, "Notification Body: " + remoteMessage.getNotification().getBody()); 
      handleNotification(remoteMessage.getNotification().getBody()); 
     } 

     // Check if message contains a data payload. 
     if (remoteMessage.getData().size() > 0) { 
      Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString()); 

      try { 
       JSONObject json = new JSONObject(remoteMessage.getData().toString()); 
       handleDataMessage(json); 
      } catch (Exception e) { 
       Log.e(TAG, "Exception: " + e.getMessage()); 
      } 
     } 
    } 

    private void handleNotification(String message) { 
     if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) { 
      // app is in foreground, broadcast the push message 
      Intent pushNotification = new Intent("pushNotification"); 
      pushNotification.putExtra("message", message); 
      LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification); 

      // play notification sound 
      NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext()); 
      notificationUtils.playNotificationSound(); 
     }else{ 
      // If the app is in background, firebase itself handles the notification 
     } 
    } 

    private void handleDataMessage(JSONObject json) { 
     Log.e(TAG, "push json: " + json.toString()); 

     try { 
      JSONObject data = json.getJSONObject("data"); 

      String title = data.getString("title"); 
      String message = data.getString("message"); 
      boolean isBackground = data.getBoolean("is_background"); 
      String imageUrl = data.getString("image"); 
      String timestamp = data.getString("timestamp"); 
      JSONObject payload = data.getJSONObject("payload"); 

      Log.e(TAG, "title: " + title); 
      Log.e(TAG, "message: " + message); 
      Log.e(TAG, "isBackground: " + isBackground); 
      Log.e(TAG, "payload: " + payload.toString()); 
      Log.e(TAG, "imageUrl: " + imageUrl); 
      Log.e(TAG, "timestamp: " + timestamp); 


      if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) { 
       // app is in foreground, broadcast the push message 
       Intent pushNotification = new Intent(""pushNotification); 
       pushNotification.putExtra("message", message); 
       LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification); 

       // play notification sound 
       NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext()); 
       notificationUtils.playNotificationSound(); 
      } else { 
       // app is in background, show the notification in notification tray 
       Intent resultIntent = new Intent(getApplicationContext(), YourActivity.class); 
       resultIntent.putExtra("message", message); 

       // check for image attachment 
       if (TextUtils.isEmpty(imageUrl)) { 
        showNotificationMessage(getApplicationContext(), title, message, timestamp, resultIntent); 
       } else { 
        // image is present, show notification with image 
        showNotificationMessageWithBigImage(getApplicationContext(), title, message, timestamp, resultIntent, imageUrl); 
       } 
      } 
     } catch (JSONException e) { 
      Log.e(TAG, "Json Exception: " + e.getMessage()); 
     } catch (Exception e) { 
      Log.e(TAG, "Exception: " + e.getMessage()); 
     } 
    } 

    /** 
    * Showing notification with text only 
    */ 
    private void showNotificationMessage(Context context, String title, String message, String timeStamp, Intent intent) { 
     notificationUtils = new NotificationUtils(context); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     notificationUtils.showNotificationMessage(title, message, timeStamp, intent); 
    } 

    /** 
    * Showing notification with text and image 
    */ 
    private void showNotificationMessageWithBigImage(Context context, String title, String message, String timeStamp, Intent intent, String imageUrl) { 
     notificationUtils = new NotificationUtils(context); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     notificationUtils.showNotificationMessage(title, message, timeStamp, intent, imageUrl); 
    } 
} 

Verwendung dieser Code, wenn noch @ Amay Problem mich dann informieren

Verwandte Themen