SIP API を使用している場合、受信した通話に応答するにはどうすればよいですか。テストのためにsipdemoのincomingcallreceiverクラスを使用しており、着信時に有効にする必要があるWalkieTalkieActivityクラスにピックアップボタンを追加しましたが、着信コールをピックアップする方法がわかりません。ヘルプや例をいただければ幸いです。
具体的には、IncomingCallReceiver クラスのサンプル コードを次に示します。
public class IncomingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SipAudioCall incomingCall = null;
try {
SipAudioCall.Listener listener = new SipAudioCall.Listener() {
@Override
public void onRinging(SipAudioCall call, SipProfile caller) {
try {
call.answerCall(30);
}
catch (Exception e) {
e.printStackTrace();
}}};
WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context;
incomingCall = wtActivity.manager.takeAudioCall(intent, listener);
incomingCall.answerCall(30);
incomingCall.startAudio();
incomingCall.setSpeakerMode(true);
if(incomingCall.isMuted()) {
incomingCall.toggleMute();
}
wtActivity.call = incomingCall;
wtActivity.updateStatus(incomingCall);
}
catch (Exception e) {
if (incomingCall != null) {
incomingCall.close();
}}}}
WalkieTalkieActivity クラスは、通話を受信するために以下を使用します。
IntentFilter filter = new IntentFilter();
filter.addAction("android.SipDemo.INCOMING_CALL");
callReceiver = new IncomingCallReceiver();
this.registerReceiver(callReceiver, filter);
およびプロファイルが作成される場所
Intent i = new Intent();
i.setAction("android.SipDemo.INCOMING_CALL");
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA);
manager.open(me, pi, null);
開発者 SIPガイドによると:
SIP サービスは、新しい通話を受信すると、アプリケーションによって提供されたアクション文字列を使用してインテントを送信します。SipDemo では、このアクション文字列は android.SipDemo.INCOMING_CALL です。
SipDemo からのこのコードの抜粋は、アクション文字列 android.SipDemo.INCOMING_CALL に基づいて保留中のインテントを使用して SipProfile オブジェクトを作成する方法を示しています。PendingIntent オブジェクトは、SipProfile が呼び出しを受信したときにブロードキャストを実行します: (これは、プロファイルが作成された上記のコードを参照) ガイドは続けて次のように述べています: ブロードキャストはインテント フィルターによってインターセプトされ、それから受信者 (IncomingCallReceiver)。アプリケーションのマニフェスト ファイルでインテント フィルターを指定するか、アプリケーションのアクティビティの SipDemo サンプル アプリケーションの onCreate() メソッドのようにコードで指定できます。
onRinging が有効になっている WalkieTalkieActivity クラスにピックアップ ボタンを追加し、クリックすると着信に応答することを検討しています。
保留、ミュート、スピーカー、通話の発信、通話の終了など、他のすべての一般的な通話の問題をうまく処理できましたが、これを理解できません。
編集 - これは機能しますか?:
public class IncomingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SipAudioCall incomingCall = null;
try {
SipAudioCall.Listener listener = new SipAudioCall.Listener() {
@Override
public void onRinging(SipAudioCall call, SipProfile caller) {
try {
call.answerCall(30);
}
catch (Exception e) {
e.printStackTrace();
}}};
WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context;
wtActivity.inbound = incomingCall;
wtActivity.updateStatus(incomingCall);
}
catch (Exception e) {
if (incomingCall != null) {
incomingCall.close();
}}}}
次に、walkietalkieactivity クラス内に新しい SipAudioCall を設定し、その中に onclicklistener を含む onRinging のリスナーを設定し、その後に次のような通常の通話処理を行います。
inbound.answerCall(30);
inbound.startAudio();
inbound.setSpeakerMode(true);
if(inbound.isMuted()) {
inbound.toggleMute();
}
--ありがとうダニエル