1

我有一个名为 SMSRecevier 的类,它接收和解释消息,并且必须根据消息执行某些任务。我有一个 RegisterPhoneActivity 和一个 RegisterPhoneFragment,我想在某个 SMS 到达时附加到该活动。我怎样才能做到这一点?我试过这个:在 SMSReceiver 中:

if (messageBody.contains(context.getResources().getString(R.string.numberResponse)))
                {
                    String[] parts = messageBody.split(" ");
                    String number1 = parts[3];
                    String number2 = parts[5];
                    String number3 = parts[7];
                    RegisterPhoneActivity registerPhoneActivity=new RegisterPhoneActivity();
                    registerPhoneActivity.showNumberFragment(number1, number2, number3);
                }

在注册电话活动中:

public void showNumberFragment(String no1, String no2, String no3)
{
    View container=findViewById(R.id.fragment_container);
    if (container!= null) {

        RegisterPhoneFragment newFragment = new RegisterPhoneFragment();
     Bundle args = new Bundle();
     args.putString(RegisterPhoneFragment.NUMBER1, no1);
     args.putString(RegisterPhoneFragment.NUMBER2, no2);
     args.putString(RegisterPhoneFragment.NUMBER3, no3);
     newFragment.setArguments(args);
    getSupportFragmentManager().beginTransaction()
    .add(R.id.fragment_container, newFragment).commit();
}
4

2 回答 2

1

定义一个接口并使用回调让活动知道收到了一条短信。

public interface OnSmsReceivedListener {
    void onSMSReceived(int arg1, string arg2); ..<----add arguments you want to pass back
}

在您的 SMS 接收器类中

ArrayList<OnSmsReceivedListener> listeners = new ArrayList<OnSmsReceivedListener>();

...

public void addSmsReceivedListener(OnSmsReceivedListener listener){
    if (!listeners.contains(listener){
        listeners.add(listener);
    }
}

public void removeSmsReceivedListener(OnSmsReceivedListener listener){
    if (listeners.contains(listener){
        listeners.remove(listener);
    }
}

当您收到符合您条件的短信时:

for (OnSmsReceivedListener listener:listeners){
   listener.onSMSReceived(arg1, arg2);
}

在您的活动中:

public class RegisterPhoneActivity extends Activity implements OnSmsReceivedListener {

...

@Override
public void onCreate(Bundle savedInstanceState) 
{
    ...
    smsRecevier.addResponseReceivedistener(this); <--- this is the instance of your receiver
    ...
}

public void onSMSReceived(int arg1, string arg2){
   // do whatever you need to do
}


@Override
public void onPause(){

    ...
    smsReceiver.removeSmsReceivedListener(this);
    ...

}

全部凭记忆,如有错别字请见谅。

这种方法将类解耦。SMS 接收者不知道这些活动。它只是回调任何注册的监听器。

这些听众可能是活动,他们可能是服务。它们可能是MySparklyUnicorn. 接收者既不知道也不关心。它只是说“如果有人感兴趣,我收到了一条短信,这是详细信息”。

于 2013-11-03T09:14:51.330 回答
0

如果您在任何类中有一个Context参数(这里您需要在您的SMSRecevier类中使用该参数),您可以使用上下文方法启动任何活动startActivity

于 2013-11-03T09:09:21.743 回答