1

Androidアプリケーションで特定の番号からSMSを受信し、アプリケーションでメッセージコンテンツを表示しようとしています。しかし、私はSMSを受信することができません。

私が受けているクラスは以下の通りです。

public class SmsReceiver extends BroadcastReceiver {

StringBuilder sb;

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction()
            .equals("android.provider.Telephony.SMS_RECEIVED")) {

        Bundle extras = intent.getExtras();
        if (extras != null) {
            Object[] pdus = (Object[]) extras.get("pdus");

            if (pdus.length < 1)
                return; // Invalid SMS. Not sure that it's possible.

            sb = new StringBuilder();
            String sender = null;
            for (int i = 0; i < pdus.length; i++) {

                SmsMessage message = SmsMessage
                        .createFromPdu((byte[]) pdus[i]);
                if (sender == null)
                    sender = message.getOriginatingAddress();

                String text = message.getMessageBody();
                if (text != null)
                    sb.append(text);
            }
            if (sender != null && sender.equals("********")) {
                // Process our sms...

                Intent broadcastIntent = new Intent();
                broadcastIntent.setAction("SMS");

                broadcastIntent.putExtra("data", sb.toString());



                context.sendOrderedBroadcast(broadcastIntent, null);
                System.out.println("MESSAGE FROM SERVER -->"
                        + sb.toString());


                this.abortBroadcast();
            }
            return;
        }
    }
}

}

SMSを受信した後、送信者を確認し、それが探している送信者である場合は、SMSを使用して別のブロードキャストを送信します。そこでコンテンツを表示します。

私のマニフェストを見る

<receiver android:name=".SmsReceiver" >
        <intent-filter android:priority="2147483647" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            <action android:name="SMS" />
        </intent-filter>
    </receiver>

解決策が見つかりません。助けてください。

4

1 に答える 1

1

確認事項(私の経験から):

  • android:priority="2147483647"は無効です。最大値は1000です。これより大きい数値は無視されます
  • ループに挿入this.abortBroadcast();します(回と呼ばれます)forpdus.length
  • 送信された SMS が基準に一致する場合は、テストのためにアプリの設定に保存し、メイン アクティビティで設定から値を読み取ります。うまくいった場合、問題はbroadcastIntent.
于 2012-10-19T08:33:07.323 に答える