android 使用BroadcastReceiver 接收模拟短信报错

在 Android 平台上使用 BroadcastReceiver 接收模拟短信时,确保你的应用程序拥有正确的权限,并正确地声明了 Broadcast Receiver。以下是一个详细的步骤和示例代码来帮助你完成这个任务。

1. 添加权限声明

首先,在你的 AndroidManifest.xml 文件中添加接收短信的权限声明:

xml
<uses-permission android:name="android.permission.RECEIVE_SMS" />

这个权限声明确保你的应用能够接收到系统发送的短信广播。

2. 创建 Broadcast Receiver

接下来,创建一个 BroadcastReceiver 类来处理接收到的短信。这个类需要继承自 BroadcastReceiver 并实现 onReceive 方法。

java
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; public class SmsReceiver extends BroadcastReceiver { private static final String TAG = "SmsReceiver"; @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); if (pdus != null) { SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); String sender = messages[i].getOriginatingAddress(); String messageBody = messages[i].getMessageBody(); long timestamp = messages[i].getTimestampMillis(); // 在这里处理收到的短信 Log.d(TAG, "SMS Received from: " + sender + ", Message: " + messageBody); } } } } }

3. 注册 BroadcastReceiver

在 AndroidManifest.xml 文件中注册你的 BroadcastReceiver。这告诉系统当有短信到达时,使用你的 BroadcastReceiver 处理它们。

xml
<receiver android:name=".SmsReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>

4. 注意事项

  • 权限检查: 确保你的应用在运行时有 RECEIVE_SMS 权限。
  • 多条消息: 当多条短信同时到达时,onReceive 方法可能会被多次调用,每次处理一条短信。
  • 异步处理: 如果你的处理逻辑比较耗时,考虑使用 IntentService 或者在后台线程中处理短信。

5. 测试

为了测试你的 BroadcastReceiver 是否能正常工作,你可以使用模拟器或者两部真机。发送一条短信到你应用程序所运行的设备,并查看 Logcat 中是否打印了你处理短信的日志信息。

通过上述步骤,你应该能够成功地在 Android 应用程序中使用 BroadcastReceiver 接收并处理模拟短信。