0

受信したメッセージの内容やソース番号など、受信したメッセージから何らかの情報を渡したいのですが、その情報をoncreateではなく、特定の条件が真のときにボタンに入れたいです。メッセージング アプリケーションなので、受信したメッセージを「受信トレイ」に保存したいのですが、どうすればよいですか? Ps。クラスの onreceive メソッドは broadcastReceiver を拡張し、他のクラスはアクティビティを拡張します。これは、ブロードキャストレシーバーを拡張する最初のクラスです

public class Re extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
 {
 Bundle bundle = intent.getExtras();       
SmsMessage[] msgs = null;
 String address="";
    String body="";
    long time = 0;
    if (bundle != null)
    {
        //---retrieve the SMS message received---
        Object[] pdus = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];
 address= msgs[i].getOriginatingAddress();
            body=msgs[i].getMessageBody().toString();
            time=msgs[i].getTimestampMillis();
}   

}

そして、これがアクティビティを拡張する2番目のクラスです

public class ThirdView extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.third);
    }
}
4

1 に答える 1

0

Receiver の onReceive からアクティビティにアクセスしたい場合は、BroadcastReceiver を Activity の内部クラスとして定義し、プログラムで登録する必要があります (onStart メソッドで、onStop メソッドで登録解除します)。

public class ThirdView extends Activity {

    private static final IntentFilter intentFilter = 
        new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

    TextButton myButton;

    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {

            SmsMessage[] messages;
            //read parse pdus data from intent and pupulate messages array
            //...

            //update the button
            if(messages.length > 0) {
                myButton.setText(messages[0].getOriginatingAddress());
            }
        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.third);
        myButton = (TextButton) findViewByiD(R.id.myButton);
    }

    @Override
    protected void onStart() {
        super.onStart();
        registerReceiver(receiver, intentFilter);
    }

    @Override
    protected void onStop() {
        unregisterReceiver(receiver);
        super.onStop();
    }
}
于 2012-04-21T19:12:03.493 に答える