在主活动中,加载了一个包含一些输入字段和一个提交按钮的布局.单击提交按钮时,onClick处理程序方法会将短信发送回同一个手机号码:
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, "hi", null, null);
Run Code Online (Sandbox Code Playgroud)
定义的广播接收器拦截消息:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,从广播接收器,我想调用一个函数(带参数),这是我的主要活动.那可能吗?如果是,我应该在广播接收器中添加什么样的代码?
fai*_*zal 19
谢谢@Manishika.详细说明,使Broadcastreceiver动态化,而不是在清单中定义它,就可以了.所以在我的广播接收器类中,我添加了代码:
MainActivity main = null;
void setMainActivityHandler(MainActivity main){
this.main=main;
}
Run Code Online (Sandbox Code Playgroud)
在BroadcastReceiver类的onReceive函数的最后,我调用main活动的函数:
main.verifyPhoneNumber("hi");
Run Code Online (Sandbox Code Playgroud)
在主要活动中,我在发送短信之前动态定义并注册广播接收器:
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);
Run Code Online (Sandbox Code Playgroud)
小智 7
将Activity的上下文传递给BroadcastReceiver的构造函数.
public class SmsReceiver extends BroadcastReceiver{
MainActivity ma; //a reference to activity's context
public SmsReceiver(MainActivity maContext){
ma=maContext;
}
@Override
public void onReceive(Context context, Intent intent) {
ma.brCallback("your string"); //calling activity method
}
}
Run Code Online (Sandbox Code Playgroud)
并在您的MainActivity中
public class MainActivity extends AppCompatActivity {
...
public void onStart(){
...
SmsReceiver smsReceiver = new SmsReceiver(this); //passing context
LocalBroadcastManager.getInstance(this).registerReceiver(smsReceiver,null);
...
}
public void brCallback(String param){
Log.d("BroadcastReceiver",param);
}
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
28645 次 |
| 最近记录: |