Androidで電話をかけ、通話が終わったらアクティビティに戻るにはどうすればいいですか? 質問する

Androidで電話をかけ、通話が終わったらアクティビティに戻るにはどうすればいいですか? 質問する

電話をかけるアクティビティを起動していますが、「通話終了」ボタンを押してもアクティビティに戻りません。 「通話終了」ボタンを押したときに戻ってくる通話アクティビティを起動するにはどうすればよいか教えてください。 電話をかける方法は次のとおりです。

    String url = "tel:3334444";
    Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url));

ベストアンサー1

PhoneStateListener を使用して、通話が終了したかどうかを確認します。通話が開始されるのを待機するリスナー アクションをトリガーし (PHONE_STATE_OFFHOOK から PHONE_STATE_IDLE に再度変更されるまで待機)、アプリを IDLE 状態に戻すコードを記述する必要がある可能性が高くなります。

サービスが稼働し続け、アプリが再起動されるようにするには、サービス内でリスナーを実行する必要があるかもしれません。コード例:

EndCallListener callListener = new EndCallListener();
TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);

リスナーの定義:

private class EndCallListener extends PhoneStateListener {
    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        if(TelephonyManager.CALL_STATE_RINGING == state) {
            Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
        }
        if(TelephonyManager.CALL_STATE_OFFHOOK == state) {
            //wait for phone to go offhook (probably set a boolean flag) so you know your app initiated the call.
            Log.i(LOG_TAG, "OFFHOOK");
        }
        if(TelephonyManager.CALL_STATE_IDLE == state) {
            //when this state occurs, and your flag is set, restart your app
            Log.i(LOG_TAG, "IDLE");
        }
    }
}

ファイルにManifest.xml次の権限を追加します。

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

おすすめ記事