2017-05-14 14 views
1

私はFCM通知を受け取るアプリケーションを持っています。通知とデータペイロードの内容を別のアクティビティに表示したいのですが、私の挑戦は通知をクリックすると、欲望の活動が、私は情報を表示することはありません。FCM通知からデータを表示する方法別のアクティビティをクリック

助けてください、次は

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.Notifications"> 

    <FrameLayout 
     android:layout_width="368dp" 
     android:layout_height="551dp" 
     android:orientation="vertical" 
     > 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:src="@drawable/job_notificatication" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginTop="120dp" 
      android:orientation="vertical"> 

      <LinearLayout 

       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="20dp" 
       android:layout_marginRight="20dp" 
       android:background="@drawable/my_border" 
       android:orientation="vertical" 
       android:padding="10dp"> 

       <TextView 

        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="JOB INFO" 
        android:textStyle="bold" /> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <TextView 

         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Job Category :" 
         android:textStyle="bold" /> 


        <TextView 
         android:id="@+id/category" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="" 
         android:textSize="36sp" /> 
       </LinearLayout> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <TextView 

         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="Job Type:" 
         android:textStyle="bold" /> 


        <TextView 
         android:id="@+id/type" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="" 
         android:textSize="36sp" /> 
       </LinearLayout> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <TextView 

         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Job Details:" 
         android:textStyle="bold" /> 


        <TextView 
         android:id="@+id/details" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="" 
         android:textSize="36sp" /> 
       </LinearLayout> 
      </LinearLayout> 

      <LinearLayout 

       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="20dp" 
       android:layout_marginRight="20dp" 
       android:layout_marginTop="20dp" 
       android:background="@drawable/my_border" 
       android:orientation="vertical" 
       android:padding="10dp"> 

       <TextView 

        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="CUSTOMER INFO" 
        android:textStyle="bold" /> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <TextView 

         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Name :" 
         android:textStyle="bold" 
        /> 
        <TextView 
         android:id="@+id/name" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="" 
         android:textSize="36sp" /> 
       </LinearLayout> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <TextView 

         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Address:" 
         android:textStyle="bold" /> 


        <TextView 
         android:id="@+id/address" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="" 
         android:textSize="36sp" /> 
       </LinearLayout> 
       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <TextView 

         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Landmark" 
         android:textStyle="bold" /> 


        <TextView 
         android:id="@+id/landmark" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="" 
         android:textSize="36sp" /> 
       </LinearLayout> 
       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <TextView 

         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Contact Person:" 
         android:textStyle="bold" /> 


        <TextView 
         android:id="@+id/contact_person" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="" 
         android:textSize="36sp" /> 
       </LinearLayout> 
       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <TextView 

         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Expected Date" 
         android:textStyle="bold" /> 


        <TextView 
         android:id="@+id/date" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="" 
         android:textSize="36sp" /> 
       </LinearLayout> 
       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <TextView 

         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Expected Time:" 
         android:textStyle="bold" /> 


        <TextView 
         android:id="@+id/time" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="" 
         android:textSize="36sp" /> 
       </LinearLayout> 

      </LinearLayout> 
      <Button 
       android:id="@+id/accept" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="ACCEPT"/> 
     </LinearLayout> 
    </FrameLayout> 

</android.support.constraint.ConstraintLayout> 

-activity_notifications.xml表示通知とデータペイロード情報activityto私の願い私のコード

MyFirebaseMessagingService 
public class MyFirebaseMessagingService extends FirebaseMessagingService { 

    private static final String TAG = "MyFirebaseMsgService"; 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     Map<String, String> data = remoteMessage.getData(); 

     //you can get your text message here. 
     if (remoteMessage.getData().size() > 0) { 
      Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString()); 

      try { 
       String storedData = remoteMessage.getData().toString(); 
       // JSONObject json = new JSONObject(storedData); 

       JSONArray arr = new JSONArray(storedData); 
       JSONObject jObj = arr.getJSONObject(0); 
       String title = jObj.getString("title"); 
       String message = jObj.getString("body"); 
       sendPushNotification(jObj); 

       final String MY_PREFS_NAME = "MyFCMFile"; 
       SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); 
       editor.putString("Title", title); 
       editor.putString("Message", message); 
       editor.apply(); 

      } catch (Exception e) { 
       Log.e(TAG, "Exception: " + e.getMessage()); 
      } 
     } 
     else { 

      String title = remoteMessage.getNotification().getTitle(); 
      String message = remoteMessage.getNotification().getBody(); 
      String click_action = remoteMessage.getNotification().getClickAction(); 
      Intent intent = new Intent(click_action); 
      intent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TOP); 
      PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this); 
      notificationBuilder.setContentTitle(title); 
      notificationBuilder.setContentText(message); 
      notificationBuilder.setSmallIcon(R.mipmap.ic_launcher); 
      notificationBuilder.setAutoCancel(true); 
      notificationBuilder.setContentIntent(pendingIntent); 

      final String MY_PREFS_NAME = "MyFCMFile"; 
      SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); 
      editor.putString("Title", title); 
      editor.putString("Message", message); 
      editor.apply(); 

      NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
      notificationManager.notify(0, notificationBuilder.build()); 


     } 
    } 

    //this method will display the notification 
    //We are passing the JSONObject that is received from 
    //firebase cloud messaging 
    private void sendPushNotification(JSONObject json) { 
     //optionally we can display the json into log 
     Log.e(TAG, "Notification JSON " + json.toString()); 
     try { 
      //getting the json data 
      JSONObject data = json.getJSONObject("data"); 

      //parsing json data 
      String title = data.getString("title"); 
      String message = data.getString("message"); 
      String imageUrl = data.getString("image"); 

      final String MY_PREFS_NAME = "MyFCMFile"; 

      SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); 
      editor.putString("Title", title); 
      editor.putString("Message", message); 
      editor.apply(); 

      //creating MyNotificationManager object 
      MyNotificationManager mNotificationManager = new MyNotificationManager(getApplicationContext()); 
      // CREATE CLICK ACTION 

      //creating an intent for the notification 

      Intent intent = new Intent(getApplicationContext(), Notifications.class); 

      //if there is no image 
      if (imageUrl.equals("null")) { 
       //displaying small notification 
       mNotificationManager.showSmallNotification(title, message, intent); 
      } else { 
       //if there is an image 
       //displaying a big notification 
       mNotificationManager.showBigNotification(title, message, imageUrl, intent); 
      } 
     } catch (JSONException e) { 
      Log.e(TAG, "Json Exception: " + e.getMessage()); 
     } catch (Exception e) { 
      Log.e(TAG, "Exception: " + e.getMessage()); 
     } 
    } 
} 

あるNotifications.java

package com.example.workman; 

import android.content.SharedPreferences; 
import android.support.annotation.IdRes; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 

public class Notifications extends AppCompatActivity { 

    TextView title, message; 

    String txtTitle, txtMessage; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_notifications); 

     title = (TextView)findViewById(R.id.category); 
     message = (TextView)findViewById(R.id.type); 




    final String MY_PREFS_NAME = "MyFCMFile"; 
    SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
    String txtTitle = prefs.getString("Title", "");//"No name defined" is the default value. 
    String txtMessage = prefs.getString("Message", "");//"No name defined" is the default value. 

     title.setText(txtTitle); 
     message.setText(txtMessage); 
} 
} 

答えて

1

FCMのドキュメントに基づいて、間違ったやり方をしているように見えます。

onMessageReceived()は、アプリケーションが既にフォアグラウンドで実行されている場合にのみ呼び出されます。

それ以外の場合は、Androidは「通知」辞書のプロパティを使用して通知を表示し、getClickAction()の値を使用して、コードを記述しなくても希望のActivityを開きます。

そして、あなたのランチャー活動の意図の余分なものを使って "データ"ペイロードを得ることができます。あなたのNotificationsクラスの

すなわち:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Bundle extras = getIntent().getExtras(); // you should find the data here 
    ... 
} 

ここでは私のために働いていたものです:私の第二Activityクラス(通知がクリックされたときに開かれるべきもの)で

私は置く:

012:
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_message); 

    TextView text = (TextView) findViewById(R.id.data2); 
    if (text != null) { 
     Bundle extras = getIntent().getExtras(); 
     StringBuilder keys = new StringBuilder(); 
     if (extras != null) { 
      for (String key : extras.keySet()) 
       keys.append(key + " = " + extras.getString(key) + "\n "); 
     } 
     text.setText("extras on second activity: " + keys.toString()); 
    } 
} 

は、私は次の出力を得ました

ご覧のとおり、my(カスタム) "データ"辞書のプロパティはすべてアクティビティに渡されました。 「通知」辞書のプロパティは渡されませんでしたが、意図的なものであると想定しています(既にアクティビティを開くためにクリックした通知を表示するために使用されているため)。

+0

いいえ、私は同じ結果を得ました。すべて同じです。 – LaideLawal

+0

@LaideLawal編集 – Eran

+0

を参照してください。どのようにキー値ペアの各値を取得しますか? – LaideLawal

関連する問題