Хочу сделать приложение под адройд, которое при получении СМС отправляет http запрос на мой сервер. Собственно приложение я написал, оно даже работает, но с оговорками.
А именно - http запрос корректно отправляется только тогда, когда телефон включен и находится в активном режиме. Если СМС приходит в момент, когда телефон находится в режиме сна, то отправка запроса не происходит, хотя receiver срабатывает.
Я заметил достаточно интересное поведение - если подключить дебаг и нажать на кнопку питания девайса (перевести в режим сна), то HTTP запрос таки будет отправлен. Но, как только отключаешь шнурок - приложение перестает отправлять запросы.
Я уже перепробовал много способов - сделал сервис, который по onCreate создает новый экземляр ресивера
@Override
public void onCreate(){
super.onCreate();
_SMSReceiver = new SMSReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(_SMSReceiver, filter);
Log.e("Connect", "onStart");
}
Потом я сделал IntentService, экземпляр которого создается при срабатывании ресивера
@Override
protected void onHandleIntent(Intent intent)
{
..............
..............
HttpAsyncSendOperation http = new HttpAsyncSendOperation(this, smsDTO);
http.execute();
}
Результат один: http запрос не отправляется, если телефон в режиме сна, зато ресивер срабатывает всегда.
Как решить проблему, может я неправильно применяю функционал сервисов android ?
PS
Отправку Http запроса я оборачиваю в asynctask;
Вот метод, вызываемый из doInBackground
Метод отправки запросаpublic static String SendHTTPRequest(String URI, List<NameValuePair> params)
{
String paramsString = URLEncodedUtils.format(params, "UTF-8");
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 8000);
HttpConnectionParams.setSoTimeout(httpParameters, 15000);
HttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpGet httpget = new HttpGet(Preferences.Host_URL + "?" + paramsString);
try
{
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null)
{
InputStream instream = entity.getContent();
String result = inputStreamToString(instream);
instream.close();
return result;
}
else return "";
}
catch (Exception e)
{
return null;
}
}