0

在我的应用程序中,我正在尝试接收来自特定号码的消息。所以我写了一个带有动作的接收器类"android.provider.Telephony.SMS_RECEIVED"。安装到手机后。我能够第一次在我的应用程序中收到它。如果我关闭并重新打开应用程序或导航到我的应用程序中的任何其他活动,我将无法再次接收它。请参阅下面给出的我的代码。

我的清单文件。

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

我的课

public class SmsReceiver extends BroadcastReceiver {

StringBuilder sb;

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction()
            .equals("android.provider.Telephony.SMS_RECEIVED")) {
        System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RECEIVED SMS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
        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);
                this.abortBroadcast();
            }
            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());



            }
            return;
        }       }
}

}

4

0 回答 0