在主 Activity 中,将加载具有一些输入字段和一个提交按钮的布局。单击提交按钮后,onClick处理程序方法将短信发送回相同的手机号码:

SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, "hi", null, null);

有一个定义为拦截消息的广播接收器:
public class SmsReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Bundle pdusBundle = intent.getExtras();
    Object[] pdus=(Object[])pdusBundle.get("pdus");
    SmsMessage messages=SmsMessage.createFromPdu((byte[]) pdus[0]);
    if(messages.getMessageBody().contains("hi")){
        abortBroadcast();
    }

}
}

现在,从广播接收器中,我想调用一个函数(带有参数),该函数在我的主要 Activity 中。那可能吗?如果是,我应该在广播接收器中添加哪种代码?

最佳答案

谢谢@Manishika。详细地说,使Broadcastreceiver动态,而不是在 list 中定义它就可以了。因此,在我的广播接收器类中,我添加了代码:

MainActivity main = null;
void setMainActivityHandler(MainActivity main){
    this.main=main;
}

在BroadcastReceiver类的onReceive函数的结尾,我调用了main Activity 的函数:
main.verifyPhoneNumber("hi");

在主要 Activity 中,我在发送短信之前动态定义并注册了广播接收器:
SmsReceiver BR_smsreceiver = null;
BR_smsreceiver = new SmsReceiver();
BR_smsreceiver.setMainActivityHandler(this);
IntentFilter fltr_smsreceived = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(BR_smsreceiver,fltr_smsreceived);

10-08 17:12