3

私のプロジェクトは単純です。と がありactivityますbroadcast receiverアプリ内から、SMS を送信したり、SMS受信したりしたいと考えています。これはうまくいきます。

しかし今、ビューからレシーバーにデータを渡したいと思います。単純な を想像してみてください。checkboxその値を に渡したいと思いますreceiver

だから、これは私のアプリの基本的なライフサイクルです:

  1. アプリを起動
  2. SMSの送信を押します
  3. 受信者は params で開始され、SMS が送信されます
  4. 受信者は SMS を受信して​​停止します。

レシーバー:

<receiver android:name=".SmsReceiver"> 
    <intent-filter android:priority="1000"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    </intent-filter> 
</receiver>

アクティビティ:
受け手:

値を渡そうとしましたが、無視されているようです。何か案は?

4

2 に答える 2

1

カスタム インテント ブロードキャストを使用して、現在のフローを実現します。コードを次のように変更します。

ステップ1 :

カスタム インテントをSMS_RECEIVED次のようにマニフェストに登録します。

<receiver android:name=".SmsReceiver"> 
    <intent-filter android:priority="1000"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
       <action android:name="xx.xxx.xxx.intent.action.SMS_STATUS_ACTION" />
    </intent-filter> 
</receiver>

ステップ2 :

public class SmsReceiver extends BroadcastReceiver {
  public static final String STATUS_INTENT = 
                  "xx.xxx.xxx.intent.action.SMS_STATUS_ACTION";
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub
            if (arg1.getAction().equals(SmsReceiver.STATUS_INTENT)) {

                    // get value here sended from Activity 
             }
            else{
                    // Check for SMS_RECEIVED Action here
              }
    }

}

ステップ 3 :

次を使用してアクティビティから値を送信しますsendBroadcast

public static final String STATUS_INTENT = 
                         "xx.xxx.xxx.intent.action.SMS_STATUS_ACTION";
@Override
    public void onClick(View v) {

        int checked = 0;

        if(this.param.isChecked()){
            checked = 1;
        }
        // put value here
        Intent intent = new Intent();
            intent.putInt("param", checked);
            intent.setAction(CUSTOM_INTENT);
            sendBroadcast(intent);
     }
于 2013-01-08T09:36:36.180 に答える
1
  1. いつでも開始および停止することBroadcastReceiverはできません。BroadcastReceiverが実行されている間だけ生きていonReceive()ます。
  2. ブロードキャストを送信するには、sendBroadcast(this.service)代わりに使用する必要がありますstartService(this.service);
  3. に変更すると、2 つのブロードキャストsendBroadcast(this.service)が受信されます (1番目は から、2 番目は から)。最初のケースではパラメータを取得できますが、2番目のケースではその逆になるため、これは間違いなくあなたが望むものではありません。sendBroadcast()SmsManagercheckedSmsMessage
  4. このcheckedパラメータをに保存してSharedPreferencesから取得できますonReceive()
于 2013-01-08T09:25:39.577 に答える