2013-11-03 67 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 遵循本教程。我如何添加偵聽器到該對象?我不應該在每個活動中創建一個新的收件人實例,而應該使用全局實例。 –