0

*123*私のアプリケーションには、特定の番号 (例: )をダイヤルしているときに発信通話を終了する (および他のアクティビティを開始する) 機能があります。

現在動作していますが、200 ミリ秒の遅延が必要です。遅延がなければ、意図を受け取ることはできません。

遅延により、複数の画面のちらつきが発生します。

my activity shows-> switch to call-> end call->switch back to my activity

public class OutgoingCallListener extends BroadcastReceiver {
    // ...
    public void onReceive(final Context context, Intent intent) {
        // ...
        if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
            // ...
            if(number.equals("*123*")) {
                // ...
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    public void run() {
                        telephonyService.endCall();
                    }
                }, 200);
            }
        }
    }
}

この特別な番号のダイヤル機能を備えた他のアプリケーションを見たことがありますが、通話は終了ビープ音なしですぐに終了し、ちらつきなしでアプリのアクティビティに切り替わります。

Q1:通話を遅滞なく終了する方法を知っている人はいますか? 以前にキャッチできる別のインテントはありACTION_NEW_OUTGOING_CALLますか?

Q2:スペックの低い (CPU が遅く、メモリが少ない) 携帯電話BroadcastReceiverでも、まともな電話と同じように動作しますか?

4

2 に答える 2

1

答えを得た...

発信呼び出しをすぐに終了するために、endCall()から呼び出す必要はありません。代わりに、 setResultData(null);ITelephonyを使用するだけです。

これは、手動で通話を終了したり、endCallを使用したりすることとは異なりますsetResultData(null)

  • 通知アイコンやメッセージはありません
  • 通話画面なし
  • 通話時間なしの乾杯
  • 通話記録なし
  • エンドコールのビープ音は鳴りません

何も起こらなかったようなものです(他に追加のアクティビティがない場合)。

public class OutgoingCallListener extends BroadcastReceiver {
    // ...
    public void onReceive(final Context context, Intent intent) {
        // ...
        if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
            // ...
            if(number.equals("*123*")) {
                setResultData(null);
                // start other activities
            }
        }
    }
}
于 2013-01-22T15:53:56.130 に答える
0

Q1: 通話を遅滞なく終了する方法を知っている人はいますか?

これが答えです着信をブロック/終了する

ACTION_NEW_OUTGOING_CALL の前にキャッチできる別のインテントはありますか?

いいえ

Q2: スペックの低い (CPU が遅く、メモリが少ない) 携帯電話で、BroadcastReceiver はまともな電話と同じように動作しますか?

はい

于 2013-01-22T14:36:36.957 に答える