2013-11-03 68 views
1

我有一个名为SMSRecevier的类,它接收和解释消息,并根据消息必须完成某些任务。 我有一个RegisterPhoneActivity和一个RegisterPhoneFragment,当某个SMS到达时,我想附加到该活动。我怎样才能做到这一点? 我尝试这样做: 在SMSReceiver:从另一个类开始片段android

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

是RegisterPhoeActivity扩展FragmentActvity? – Hardik

+0

通过这样做,我得到容器空。我想这是因为我创建了一个RegisterPhoneActivity的新实例。 –

回答

0

如果您有任何类Context参数(在这里你需要在你的SMSRecevier类),你就可以开始任何活动与上下文的方法。

1

定义一个接口并使用回调让活动知道已收到SMS。

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的实例。接收者既不知道也不在乎。它只是说“如果任何人有兴趣,我收到了短信,这里是细节”。

+0

我觉得这是一个非常好的方法。我会试试看。谢谢 –

+0

不客气。顺便说一句,你不应该使用'new'来创建一个活动。只有使用'意图'。 – Simon

+0

我有公共类SMSReceiver扩展了BroadcastReceiver。这以某种方式独立存在。 http://mobiforge.com/developing/story/sms-messaging-android 遵循本教程。我如何添加侦听器到该对象?我不应该在每个活动中创建一个新的收件人实例,而应该使用全局实例。 –