在我的应用程序中,有一项功能可以在拨打特定号码时结束拨出电话(并启动其他活动)(例如*123*
)
它目前正在运行,但需要200毫秒的延迟。没有延迟,意图就无法收到。
延迟会导致多个屏幕闪烁:
my activity shows
- > switch to call
- > end call
- > switch back to my activity
public class OutgoingCallListener extends BroadcastReceiver {
// ...
public void onReceive(final Context context, Intent intent) {
// ...
if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
// ...
if(number.equals("*123*")) {
// ...
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
telephonyService.endCall();
}
}, 200);
}
}
}
}
我看到其他具有此特殊号码拨号功能的应用程序,呼叫会立即结束,而不会发出最终呼叫声,并切换到应用程序活动而不会闪烁。
Q1:有没有人知道如何立即结束通话?我们可以在ACTION_NEW_OUTGOING_CALL
之前找到另一个意图吗?
Q2:在规格较低(CPU速度慢,内存较少)的手机上,BroadcastReceiver
的工作方式与正常手机相同吗?
答案 0 :(得分:1)
得到答案......
要结束传出立即致电 ,我们甚至不需要从endCall()
致电ITelephony
,相反,我们可以只需使用 setResultData(null);
与手动结束通话或使用endCall与setResultData(null)
不同:
就像没有发生任何事情一样(如果......没有任何其他额外的活动)。
public class OutgoingCallListener extends BroadcastReceiver {
// ...
public void onReceive(final Context context, Intent intent) {
// ...
if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
// ...
if(number.equals("*123*")) {
setResultData(null);
// start other activities
}
}
}
}
答案 1 :(得分:0)
Q1:有没有人知道如何立即结束通话?
在ACTION_NEW_OUTGOING_CALL之前我们还有其他意图吗?
否强>
Q2:在规格较低(CPU速度慢,内存较少)的手机上,BroadcastReceiver的工作方式与正常手机相同吗?
是强>