1

PhoneStateListener を使用して、携帯電話の通話状態の変化をリッスンしています。私が取り組んでいるのは、数秒後に電話をかけ、前のアクティビティに戻ることです。しかし、再びアクティビティに戻るたびに CallThread が再度実行され、何度も何度も呼び出しの後に呼び出しを行うという状況に陥ります。誰でも助けてもらえますか?ありがとうございました!

これは、アクティビティの onCreate() メソッドに入れたものです。

    Thread CallThread = new Thread(CallRunnable);
    CallThread.start();

電話をかけるためのランナブルを設定します。

Runnable CallRunable = new Runnable() {

    @Override
    public void run() {
        try {
            Thread.sleep(5 * 1000); //wait for 5 secs and then make phone call
        } catch (InterruptedException e) {
        }

        makePhoneCall(phoneNO);

    }
};

私のPhoneStateListenerでは、

public class MyPhoneStateListener extends PhoneStateListener {

    private boolean isCalling = false;

    @Override
    public void onCallStateChanged(int state, String phoneNumber) {

        switch (state) {
        case TelephonyManager.CALL_STATE_OFFHOOK:
            isCalling = true;
            break;
        case TelephonyManager.CALL_STATE_IDLE:
            Log.i("Call", "IDLE");
            if (isCalling) {

                Intent i = new Intent(getIntent());
                i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(i);

                isCalling = false;

            }
            break;
        default:
            break;
        }
    }
}
4

2 に答える 2

0

もちろん、Phone Call IDLE状態から戻るたびにアクティビティを再起動するため、再度電話をかけるため、onCreateが再度トリガーされ、extrasパラメーターをそこに配置して、新しく作成するか、電話から戻るか、SharedPreferenceに保存するかを確認できます

于 2015-07-22T04:50:56.537 に答える
0
public class MyPhoneStateListener extends PhoneStateListener {

private boolean isCalling = true;
private int mCurrentState = TelephonyManager.CALL_STATE_IDLE;

@Override
public void onCallStateChanged(int state, String phoneNumber) {

if (state != mCurrentState) {    
    switch (state) {
        case TelephonyManager.CALL_STATE_OFFHOOK:
            break;
        case TelephonyManager.CALL_STATE_IDLE:
            Log.i("Call", "IDLE");
            if (isCalling) {

                Intent i = new Intent(getIntent());
                i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(i);

                isCalling = false;

            }
            else {
                isCalling = true;
            }
            break;
        default:
            break;
        }
    mCurrentState = state;
    }
}

}

于 2013-04-21T19:26:03.307 に答える