我正在使用android sipmanager实现一个简单的sip调用。在两个座席之间建立呼叫后,我想在屏幕上显示下面列出的浮动操作按钮。但是有些代码永远不会激活,因此无法在成功调用后使该按钮可见。它确实显示日志。任何帮助将不胜感激
SipAudioCall.Listener listener = new SipAudioCall.Listener() {
/**
* Name: onCallEstablished
* Description: onCallEstablished is called when the
* user establishes a call. This method
* will enable the User to talk to the
* person on the opposite line.
*/
@Override
public void onCallEstablished(SipAudioCall call) {
super.onCallEstablished(call);
call.startAudio();
call.setSpeakerMode(true);
//it does shows log in console
Log.e("$$", "Manager was instantiated");
// it doesnt change floating action button to visible
View view7 =findViewById(R.id.fab6);
view7.setVisibility(View.VISIBLE);
setText("Call ESTABLISEHED");
if (call.isMuted()) {
call.toggleMute();
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你的描述来看,问题似乎出在尝试更新UI元素(即Floating Action Button)的可见性上,而这一操作应该在主线程中进行。在Android中,SipAudioCall.Listener
的回调方法(如onCallEstablished
)可能不在UI线程上执行,因此直接修改UI元素可能会没有效果。
为了解决这个问题,你需要将修改UI的操作放到主线程中执行。你可以使用runOnUiThread
方法来确保UI更新代码在正确的线程上运行。以下是修改后的代码示例:
SipAudioCall.Listener listener = new SipAudioCall.Listener() {
@Override
public void onCallEstablished(SipAudioCall call) {
super.onCallEstablished(call);
call.startAudio();
call.setSpeakerMode(true);
Log.e("$$", "Manager was instantiated");
// 使用runOnUiThread确保UI操作在主线程执行
runOnUiThread(new Runnable() {
@Override
public void run() {
View view7 = findViewById(R.id.fab6);
view7.setVisibility(View.VISIBLE);
// 假设setText是一个可以设置文本的方法,需要确保它也在主线程调用
setText("Call ESTABLISHED");
if (call.isMuted()) {
call.toggleMute();
}
}
});
}
};
这段代码中,runOnUiThread
方法是Activity类的一个方法,它接收一个Runnable对象并在UI线程上执行它。这样,无论当前回调在哪个线程上触发,UI更新都会正确地在主线程上执行,从而避免了UI更新不生效的问题。
请确保你是在一个Activity或Fragment的上下文中调用了这个方法,因为runOnUiThread
是这些类的一部分。如果你在其他类型的组件中(比如Service),则需要采用其他方式来处理UI更新,比如通过BroadcastReceiver或者EventBus通知到UI组件。