如何在两个不同的端口接收数据短信

Tal*_*lha 5 sms android broadcastreceiver android-intent

我有两个应用程序与两个不同的数据短信广播,我想在它们两个接收数据短信.为此,我在每个应用程序中创建了广播

应用1中的接收器1:

 <receiver android:name=".SMSReceiver" >
            <intent-filter android:priority="10" >
                <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
                <data android:scheme="sms" />
                <data android:port="5555" />
            </intent-filter>
  </receiver>
Run Code Online (Sandbox Code Playgroud)

应用程序二中的接收者两个:

  <receiver android:name=".SMSReceiver1" >
            <intent-filter android:priority="10" >
                <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
                <data android:scheme="sms" />
                <data android:port="8901" />
            </intent-filter>
   </receiver>
Run Code Online (Sandbox Code Playgroud)

现在的情况是这样,短信只在第一个安装的应用程序中收到,我尝试过相同的端口,类名和不同的.但问题没解决,怎么解决呢?这是我的广播接收器类

public class SMSReceiver extends BroadcastReceiver {



    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle myBundle = intent.getExtras();

        SmsMessage[] messages = null;
        String strMessage = "";
        byte[] data = null;

        if (myBundle != null) {

            Object[] pdus = (Object[]) myBundle.get("pdus");
            messages = new SmsMessage[pdus.length];

            for (int i = 0; i < messages.length; i++) {
                messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                phoneNo = messages[i].getOriginatingAddress();
                try {
                    data = messages[i].getUserData();

                } catch (Exception e) {

                }
                if (data != null) {
                    for (int index = 0; index < data.length; ++index) {
                        strMessage += Character.toString((char) data[index]);
                    }
                }

            }

            message = strMessage;


            System.out.println("message received: " + message);

    }
}
Run Code Online (Sandbox Code Playgroud)

和我的发送邮件的代码

SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendDataMessage(myNumber, null,(short)8901, sms.getBytes(), null, null);
Run Code Online (Sandbox Code Playgroud)

Vic*_*nin 1

有几件事需要仔细检查:

a) 您确定您已android.permission.RECEIVE_SMS在两个应用程序中添加了权限吗?

b) 您能否从两个清单中删除这一部分,以确保意图过滤不会混乱?

<data android:scheme="sms" />
<data android:port="5555" />
Run Code Online (Sandbox Code Playgroud)

c) 如果 b) 可行,您可能有兴趣在接收器代码中进行过滤。