2016-12-06 1 views
2

앱이 백그라운드에 있어도 알림 메시지가 표시되지만 알림을받을 때마다 사용자가 알림을 클릭하지 않아도 자동으로 활동이 열립니다. 내 onMessageReceivedFCM Android 데이터 메시지

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    Bundle b = new Bundle(); 
    if (data.containsKey("click_action")) { 
     if(data.containsValue("postlike") || data.containsValue("comment") || data.containsValue("newpost")){ 
      b.putString("PostId", data.get("post_id").toString()); 
      Firebase_Action_Click.startActivity(data.get("click_action"), b, this); 
     } else { 
      Intent intent = new Intent(this, ActivityMain.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      pendingIntent = PendingIntent.getActivity(this, 0, intent,PendingIntent.FLAG_ONE_SHOT); 
     } 
    } 

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.notification_icon) 
     .setContentText(data.get("body")) 
     .setAutoCancel(true) 
     .setSound(defaultSoundUri) 
     .setContentIntent(pendingIntent); 

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

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

그리고 내

public static void startActivity(String className, Bundle extras, Context context) { 
    Class cls = null; 
    try { 
     cls = Class.forName(className); 
    } catch(ClassNotFoundException e){ 
     //means you made a wrong input in firebase console 
    } 

    Intent i = new Intent(context, cls); 
    i.putExtras(extras); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i); 
} 

내가이 줄을 추가 한 내 런처 활동 Firebase_Action_Click,

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    if (intent.hasExtra("click_action")) { 
     Firebase_Action_Click.startActivity(intent.getStringExtra("click_action"), intent.getExtras(), this); 
    } 
} 

모든 것이 잘 진행이 아니라 유일한 문제입니다 앱이 백그라운드에 있어도 알림이 표시되는 경우에도 얼굴을 보게됩니다. 응용 프로그램을 자동으로 엽니 다.

사용자가 알림을 클릭 할 때만 동일한 작업을 원합니다.

사람이 사전에 감사

+0

이 줄은 어떻게해야합니까? Firebase_Action_Click.startActivity (data.get ("click_action"), b, this); – Mushirih

답변

0

함수에서 Activity을 실행하기 때문에 Activity이 실행됩니다. 따라서 알림을 클릭 할 때 Activity을 시작하려면 으로 Activity을 시작해야 할 수 있습니다.

코드에서 간단한 수정을 권하고 싶습니다. startActivity 함수가 Firebase_Action_Click에있는 경우 Intent을 반환 할 수 있습니다.

public static Intent startActivity(String className, Bundle extras, Context context) { 
    Class cls = null; 
    try { 
     cls = Class.forName(className); 
    } catch(ClassNotFoundException e){ 
     //means you made a wrong input in firebase console 
    } 

    Intent i = new Intent(context, cls); 
    i.putExtras(extras); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    return i; // Return the intent from here. 
} 

는 이제 onMessageReceived 기능, 당신은 if(data.containsValue("postlike") || data.containsValue("comment") || data.containsValue("newpost")) 내부에 너무 PendingIntent을 설정해야합니다 -이 경우 문을, 당신은 else 부분에 대한 설정처럼. 그래서 코드가 이렇게 보일 것입니다.

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    Bundle b = new Bundle(); 

    if (data.containsKey("click_action")) { 
     if(data.containsValue("postlike") || data.containsValue("comment") || data.containsValue("newpost")) { 
      b.putString("PostId", data.get("post_id").toString()); 
      Intent intent = Firebase_Action_Click.startActivity(data.get("click_action"), b, this); 

      // Now add the flags and create pendingIntent here 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 

     } else { 
      Intent intent = new Intent(this, ActivityMain.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
     } 
    } 

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.notification_icon) 
     .setContentText(data.get("body")) 
     .setAutoCancel(true) 
     .setSound(defaultSoundUri) 
     .setContentIntent(pendingIntent); 

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

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

이제 알림 시스템이 제대로 작동합니다.

0

가장 단순한, 그래서의 ajustar 오 플래그 FLAG_ACTIVITY_NEW_TASK 자체 O metodo onMessageReceived estiver 로린 드 우마의 CLASSE 가야의 NAO의 세자 활동이 나를 도울 수 없습니다 : D ~

없음 metodo 수용체 :

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_LAUNCHER); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    ComponentName componenteName = new ComponentName(this, YourActivity.class); 
    intent.setComponent(componenteName); 
    startActivity(intent); 
} 

없음 아스 선언하지 :

<activity android:name=".YourActivity" /> 
+1

영어하십시오. –

관련 문제