0

brodcastreceiver onCallEnded (SIP) でアクティビティを終了する方法について質問があります。次のような放送受信機があります。

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 onCallEnded(SipAudioCall call) {

                 // IncomingCallActivity.finish();

                }
            };

            Main mainActivity = (Main) context;
            incomingCall = mainActivity.manager.takeAudioCall(intent, listener);
            mainActivity.call = incomingCall;

            Intent i = new Intent(context, IncomingCallActivity.class);  
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
            context.startActivity(i);

次に、通話に応答または拒否する新しいアクティビティを開始しますが、通話が終了したときにそれを閉じる方法は? IncomingCallActivity.finish()では使用できませんonCallEnded

4

3 に答える 3

0

次のように実行できます。

    @Override
            public void onCallEnded(SipAudioCall call) {

             // IncomingCallActivity.finish();
             //Here set any value like an int
             intToClose = 1;

            }

次に、アクティビティで をチェックし、intToCloseその 1 の場合は呼び出すだけですfnish();

更新: このコードは私の考えによるものであるため、エラーが発生する可能性があります。これを現在のアクティビティに追加するか、次のようにします。

scheduler = Executors.newSingleThreadScheduledExecutor ( );
                    scheduler.scheduleAtFixedRate ( new Runnable ( ) {
                public void run ( )
                    {
                      runOnUiThread ( new Runnable ( ) {
                      public void run ( ) {
                      closeInt = IncomingCallReceiver.intToClose;
                      if ( closeInt == 1 ) {    
                          scheduler.shutdown ( );       
                          finish ( );
                       }

                     }
                } );
            }
        }, 750, 750, TimeUnit.MILLISECONDS );
于 2013-01-03T13:43:24.650 に答える