Я делаю приложение, когда исходящий вызов выполняется на определенный номер (назовем его 123456789), он попытается отправить HTTP-сообщение URL-адресу с несколькими цифрами и дождитесь ОК, а затем позвоните.Приостановить и отправить сообщение HTTP на исходящий вызов Android
Однако, если этот HTTP POST занимает больше, чем, скажем, 4 секунды, то мы добавляем цифры в виде DTMF на исходящий номер.
Проблема в том, что на Android основная тема не должна (или не может) быть усыпанной, или , иначе телефон станет не отвечать на запросы, а затем сбой, поэтому мне нужно найти ожидание задержки вызов делается на 4 секунды, а я делаю POST.
Вот как выглядит код. Я не собираюсь использовать конкретные строки кода, но я больше пытаюсь понять, как заставить телефон ждать результата сообщения, прежде чем передавать вызов.
public class OutgoingCallReceiver extends BroadcastReceiver {
public void onReceive(Context pContext, Intent intent) {
Context context = pContext;
String action = intent.getAction();
String digitsToSend = ",1234";
String outgoingNumber = getResultData();
if (action.equals(Intent.ACTION_NEW_OUTGOING_CALL)
&& isNetworkAvailable(pContext)
&& outgoingNumber.equals("123456789") {
try{
//We set a HTTPConnection with timeouts, so it fails if longer than 4 seconds
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 2000); // allow 2 seconds to create the server connection
HttpConnectionParams.setSoTimeout(httpParameters, 2000); // and another 2 seconds to retreive the data
HttpClient client = new DefaultHttpClient(httpParameters);
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
if (response.getStatusLine().getStatusCode() == 200){
//Success
setResultData(outgoingNumber);
}
} catch (Exception e){
//Took too long, sending digits as DTMFs
setResultData(outgoingNumber+digitsToSend);
}
}
}