1

さて、私はメッセージをリッスンしているbroadcastreceiverを拡張するクラスを持っています。これで、メッセージを受信するたびに、アプリの新しいインスタンスが作成されます。だから私はそれを閉じるときに戻るボタンを2回タップする必要があります。誰か助けてもらえますか?

public class SMSReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
    Bundle myBundle = intent.getExtras();
    SmsMessage [] messages = null;
    String strMessage = "";
    String phoneNumber = "";

    if (myBundle != null) {
        Object [] pdus = (Object[]) myBundle.get("pdus");
        messages = new SmsMessage[pdus.length];

        for (int i = 0; i < messages.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            strMessage += "SMS From: " + messages[i].getOriginatingAddress();
            strMessage += " : ";
            strMessage += messages[i].getMessageBody();
            strMessage += "\n";

            phoneNumber = messages[i].getDisplayOriginatingAddress();
        }

        if (phoneNumber.equals("T-Mobile")) {
            Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show();
            abortBroadcast();
        }

    }
}
}
4

2 に答える 2

3

アクティビティのインスタンスが現在のタスクの先頭にすでに存在する場合、システムは、アクティビティの新しいインスタンスを作成するのではなく、onNewIntent()メソッドの呼び出しを介してインテントをそのインスタンスにルーティングします。アクティビティは複数回インスタンス化でき、各インスタンスは異なるタスクに属することができ、1つのタスクは複数のインスタンスを持つことができます(ただし、バックスタックの最上位のアクティビティがアクティビティの既存のインスタンスでない場合のみ)。

そのような設定

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

また

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

アクティビティの複数のインスタンスを回避するため。ありがとう

詳細については、こちらのブログをご覧ください。

于 2012-07-13T20:32:39.717 に答える
1

まず第一に、それがあなたのアプリの新しいインスタンスを作成しているとは思いません。より可能性が高いのは、活動が前面に出されていることです。マニフェストを見るか投稿して、放送がどのように方向付けられているかを確認する必要があると思います。放送のターゲットも活動を開始する効果がある可能性があります。マニフェストを確認してください。放送受信機にはこれを引き起こすものは何もありません。とは言っても、それは本当にAndroidOS次第です。しかし、2つのインスタンスまで。それは起こっていないだけです。

PS。正確な理由はわかりませんが、おそらくブロードキャスト受信機からToastを発行せず、代わりにstartActivity()を使用してアクティビティに通信します。

于 2012-07-13T19:05:21.970 に答える