onIncomingCall()
是来自第三方库pjsip
中的类的重写方法。当使用SIP进行来电时,将调用此方法。不知何故,如果呼叫应答代码在同一方法内或在同一方法内调用,该方法可以使呼叫得到回答。但是我希望在用户按下按钮时可以接听电话。我创建了一个回叫,并在呼叫来临时让用户按下按钮,但如果呼叫应答代码在onIncomingCall()
方法之外被呼叫,则该呼叫应答代码不起作用。所以我决定把Thread.sleep(10000)
放在onIncomingCall()
,当用户按下按钮时,我想取消这个线程,这样就可以执行呼叫应答代码。我使用Thread.currentThread().interrupt()
,但Thread.sleep
没有取消。我编写了一个单独的活动来测试这个功能,但它失败了,这意味着Thread.currentThread.interrupt
根本不适合我。实现这个目标的最佳选择是什么?请更新我..我真的很苦恼。Thread.currentThread()。interrupt()不适用于Android
@Override
public void onIncomingCall(OnIncomingCallParam prm) {
onIncomingCallParam = prm;
try {
Thread.sleep(10000);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
answerCall();
}
UPDATE:
我固定下面的方法
resetThread();
while (testThread) {
try {
Log.d(TAG,"testThread true");
Thread.sleep(1000);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
Log.d(TAG,"Call Answering code");
private void resetThread() {
Thread newThread = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
testThread = false;
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
});
try {
newThread.start();
} catch (Exception ie) {
ie.printStackTrace();
}
}
您必须从与正在休眠的线程(B)不同的线程(A)调用'interrupt()'。因此,从线程A开始,您需要调用'threadB.interrupt()' - 此时您正在中断线程A,这没有任何意义。 – assylias
@assylias线程上调用Thread.sleep。如何区分线程A和线程B – praneel
您可以在'onIncominCall()':'sleepingThread = Thread.currentThread();'中使用变量(可能需要变为volatile),并在其他代码中调用sleepingThread。中断()'。但更有可能你应该改变你的设计 - 使用Thread.sleep()'确实是一种代码味道。 – assylias