我有一个名为 SMSRecevier 的类,它接收和解释消息,并且根据消息必须执行某些任务。 我有一个 RegisterPhoneActivity 和一个 RegisterPhoneFragment,我想在某个 SMS 到达时附加到该 Activity 。我怎样才能做到这一点? 我试过这个: 在 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();
}
最佳答案
定义一个接口(interface)并使用回调让 Activity 知道已收到短信。
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);
}
在您的 Activity 中:
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 接收方不知道这些 Activity 。它只是回调任何已注册的监听器。
那些听众可能是 Activity ,他们可能是服务。它们可能是 MySparklyUnicorn
的实例。接收者既不知道也不关心。它只是说“如果有人感兴趣,我收到了一条短信,这里是详细信息”。
关于android - 从另一个类 android 开始 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751247/