0

我有一个问题,如何在 brodcastreceiver onCallEnded (SIP) 中完成活动。有一个这样的brodcastreceiver:

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 回答
0

首先,为什么您可以在 IncomingCallActivity 本身中添加侦听器。我认为这不会有什么不同。

其次为您的解决方案,

使用 FLAG_ACTIVITY_SINGLE_TOP 开始您的活动,以便您在活动的 onNewIntent(Intent intent) 中收到新的 Intent。

然后 onCallEnded 再次启动活动。

Intent i = new Intent(context, IncomingCallActivity.class);  
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);  
i.putExtra("Close", true); // an extra which says to finish the activity.
context.startActivity(i);

现在在 onNewIntent(Intent intent)

if(intent.getBooleanExtra("Close", false))
  finish();
于 2013-01-03T13:59:53.840 回答
0
  • 我用这段代码解决了我的问题。

  • 试试这个,你的问题就解决了。空闲状态下没有endcall广播等。finish()编码快乐!!

    if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
       ((Activity)context).finish();
    }
    
于 2018-12-05T12:30:12.950 回答