在主 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);