在我的应用程序中,我正在尝试从特定号码接收消息。所以我写了一个带有动作"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;
} }
}
}