如何完成broadcastreceiver onCallEnded()中的活动

时间:2013-01-03 13:38:03

标签: android android-activity broadcastreceiver sip

我有一个问题,如何在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

3 个答案:

答案 0 :(得分: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 );

答案 1 :(得分: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(意图意图)

if(intent.getBooleanExtra("Close", false))
  finish();

答案 2 :(得分:0)

  • 我使用此代码解决了我的问题。

  • 尝试此操作将解决您的问题。没有广播endcall,因此finish()处于空闲状态。 编码愉快!

    if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
       ((Activity)context).finish();
    }