1

メッセージを受信して​​解釈する SMSRecevier というクラスがあり、メッセージに応じて特定のタスクを実行する必要があります。特定の SMS が到着したときに、そのアクティビティにアタッチしたい 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();
}
4

2 に答える 2

1

インターフェイスを定義し、コールバックを使用して、SMS が受信されたことをアクティビティに知らせます。

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);
    }
}

条件に一致する SMS を受信した場合:

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。受け手は知らないし、気にもしない。「誰か興味があれば、SMS を受け取りました。詳細はこちらです」とだけ書かれています。

于 2013-11-03T09:14:51.330 に答える