5

2 つの異なるデータ SMS ブロードキャストを使用する 2 つのアプリケーションがあり、両方でデータ SMS を受信したいと考えています。そのために、各アプリでブロードキャストを作成しました

アプリ 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>

アプリ 2 のレシーバー 2:

  <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>

今、シナリオはこれです.SMSは最初にインストールされたアプリでのみ受信されました.私は同じポート、クラス名、そして異なるもので試しました. しかし、問題は解決していません。どうすれば解決できますか?? ここに私のブロードキャストレシーバークラスがあります

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);

    }
}

メッセージを送信するための私のコード

SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendDataMessage(myNumber, null,(short)8901, sms.getBytes(), null, null);
4

2 に答える 2

1

別のポートからSMSを受信するには、AndroidManifest.xmlでこの受信者を設定します

<receiver android:name=".SMSBcastReceiver">
    <intent-filter android:priority="10"> 
    <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
<data android:scheme="sms" /> 
        <data android:port="13013" /> 
</intent-filter>
</receiver>

次に、これをSMSBcastReceiverクラスに設定します

public void onReceive(final Context context, Intent intent) {

Bundle bundle = intent.getExtras();

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

for (int n = 0; n < messages.length; n++) 
{
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}

smsOrigin = smsMessage[0].getDisplayOriginatingAddress();
smsData = smsMessage[0].getUserData();

for(int index=0; index<smsData.length; ++index)
{
smsBody += Character.toString((char)smsData[index]);
}
}
于 2013-01-17T05:46:34.400 に答える
1

再確認するいくつかのこと:

android.permission.RECEIVE_SMSa)両方のアプリケーションにアクセス許可を追加しましたか?

b) インテント フィルタリングが台無しにならないように、両方のマニフェストからこの部分を削除できますか?

<data android:scheme="sms" />
<data android:port="5555" />

c) b) が機能する場合は、Receiver コードでフィルタリングを行うことに関心があるかもしれません。

于 2013-01-15T23:17:49.813 に答える