Я хочу обрабатывать полученное сообщение только по 1 фрагменту за раз - PullRequest
0 голосов
/ 28 марта 2020

У меня есть 2 фрагмента в моей деятельности. Я использую вкладку. Я сталкиваюсь с проблемой, что всякий раз, когда я получаю сообщение, только второй фрагмент обрабатывает это сообщение вместо первого. Есть ли способ заставить только текущий фрагмент обработать сообщение?

Код для службы MessageChecker:

public class MessageChecker extends BroadcastReceiver {
    private static MessageListener mListener;
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle data = intent.getExtras();
        Object[] pdus = (Object[]) data.get("pdus");
        for(int i=0; i<pdus.length; i++){
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
            String message = smsMessage.getMessageBody();
            mListener.messageReceived(message);
        }
    }

    public static void bindListener(MessageListener listener){
        mListener = listener;
    }
}

Код для моего манифеста приложения:

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <service android:name=".MyFirebaseMessageService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
        <activity android:name=".Gateman_Transmition" />
        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".MessageChecker">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

    </application>

Ответы [ 2 ]

1 голос
/ 28 марта 2020

Для восстановления сообщения по конкретному фрагменту. 1- вы можете инициализировать BroadcastReceiver локально, например,

   mRegistrationBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {

            if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
                // new push notification is received

                String message = intent.getStringExtra("message");

            }
        }
    };

2- и зарегистрироваться незарегистрированным для следующих событий.

@Override
public void onResume() {

        // by doing this, the activity will be notified each time a new message 
arrives
        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mRegistrationBroadcastReceiver,
                new IntentFilter(Config.PUSH_NOTIFICATION));

    super.onResume();
}

@Override
public void onPause() {

      LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mRegistrationBroadcastReceiver);
      super.onPause();
}
0 голосов
/ 28 марта 2020

Я решил эту проблему самостоятельно, просто добавив слушателя к классу фрагмента кнопкой, соответствующей заданной c задаче каждого фрагмента.

Спасибо за помощь !!

...