我有一个问题,如何在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
。
答案 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();
}