我正在从我的应用程序进行验证调用。在配置完5-10秒后应该断开连接。
这是我的代码;
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + phoneNumber));
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
handler.postDelayed(new Runnable() {
@Override
public void run() {
/*It is never called up untill call got disconnected/hanged up. */
Log.d(TAG, "Disconnecting :");
disconnectCall();
}
}, 5000);
startActivity(callIntent);
问题是disconnectCall()方法没有被调用,直到callIntent活动被挂起,即用户强行断开call / hanged up。我需要在调用活动期间调用 disconnectCall ()。不会在代码中找到问题所在。
答案 0 :(得分:3)
您正在呼叫 startActivity(callIntent)。 这意味着您将控制转移到调用者应用程序android 。现在,当用户想要时,android调用者应用程序可以断开调用。
答案 1 :(得分:2)
正如daniel所提到的,一旦你开始调用活动,你就不再受控制了,你的应用程序主线程只会在你的活动回到前台时获得CPU时间。
挂断使用this。
答案 2 :(得分:1)
从我的角度来看,问题在于单线程android服务类,它不会调用处理程序或任何方法,直到上一个活动结束。所以我在处理程序runnable中添加了一段代码并且它已经工作了。
handler.post(callTestHandler = new Runnable() {
@Override
public void run() {
try {
//Intent callIntent = new Intent("android.intent.action.NEW_OUTGOING_CALL");
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + phoneNumber));
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.d(TAG, "Disconnecting :");
disconnectCall();
}
}, 5000);
startActivity(callIntent);
} catch (Exception e) {
e.getMessage();
}
}
});
如果有人有不同的答案/解决方案,请发布。