5

SMS が受信されるまで停止しなければならない単純なメイン アクティビティがあります...のメソッドMainActivity内からメソッドを起動するにはどうすればよいですか?BroadcastReceiveronReceive()

Signal と Wait はありますか? pending で何かを渡すことはできますIntentか、またはこの通信をどのように実装できますか?

4

4 に答える 4

10

BroadcastReceiver から Activity への通信は厄介です。活動がすでになくなっている場合はどうなりますか?

私があなただったら、Activity 内に新しい BroadcastReceiver を設定し、CLOSE メッセージを受け取ります。

private BroadcastReceiver closeReceiver;
// ...
closeReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {

  //EDIT: receiving parameters
  String value = getIntent().getStringExtra("name"); 
  //... do something with value

  finish();
  }
};
registerReceiver(closeReceiver, new IntentFilter(CLOSE_ACTION));

次に、SMS BroadcastReceiver から次のアクションを送信できます。

Intent i = new Intent(CLOSE_ACTION);
i.putExtra("name", "value"); //EDIT: this passes a parameter to the receiver
context.sendBroadcast(i);

これが役立つことを願っていますか?

于 2010-11-09T16:41:46.463 に答える
2

私はまったく同じ問題を抱えていました。インテントを使用しようとしましたが、失敗しました

それを使用する最も簡単な方法は、静的メソッドと静的変数を使用することです

MainActivity.java

public static void stopsms()
{

/*
some code to stop the activity

*/

}

SMSReceiver.java

最後にこの関数を呼び出します

MainActivity.stopsms();

静的メソッドと変数を使用するときにコードが影響しない場合は、驚くほど機能します。助けが必要な場合はお知らせください。

于 2012-11-02T12:39:43.177 に答える
1

ただし、アクティビティ内で 2 番目のレシーバーを登録する際の問題は、マニフェストに登録する場合のように永続的ではないことです... したがって、このソリューションは機能する可能性がありますが、アクティビティがバックグラウンドで実行されている場合にのみ機能します。

于 2011-08-07T15:24:46.653 に答える
0

簡単です。次のようなインターフェースを使用してください。

1)ブロードキャストレシーバーでインターフェイスを作成します。

public interface ChangeListener{
    public void functionWhoSendData(String type);
    public void etc();
}

ブロードキャストレシーバーでそのインターフェイスをインスタンス化し、それを使用します。

public void onReceive(....
    String data=functionWhereYouReceiveYouData();
    ChangeListener.functionWhoSendData(data);
}

そしてあなたの活動では、それがあなたのインターフェースを実装するようにします

于 2012-05-07T14:31:09.020 に答える