我有一个名为SMSRecevier的类,它接收和解释消息,并根据消息必须进行某些任务。 我有一个RegisterPhoneActivity和一个RegisterPhoneFragment,我希望在某个短信到达时附加到该活动。我怎样才能做到这一点? 我试过这个: 在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);
}
RegisterPhoneActivity中的:
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();
}
答案 0 :(得分:1)
定义一个接口并使用回调让活动知道已收到短信。
public interface OnSmsReceivedListener {
void onSMSReceived(int arg1, string arg2); ..<----add arguments you want to pass back
}
在短信接收器类中
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
的实例。接收者既不知道也不关心。它只是说“如果有人感兴趣,我收到了短信,这里是详细信息”。
答案 1 :(得分:0)
如果您在任何课程中都有Context参数(此处您需要SMSRecevier
课程中的参数),则可以使用startActivity
上下文方法开始任何活动。