После прочтения большого количества тем на SOF & сообщение в блоге, у меня работает BroadcastReceiver. Но я заметил, что когда-то это не работает, особенно когда я звоню. Я просто хочу знать, работает ли BroadcastReceiver, если я получаю SMS-сообщение между звонком? или что-то не так в коде.Иногда Android BroadcastReceiver не работает
SmsReceiver.java
public class SmsReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.d("SmsReceiver Broadcast", "OK");
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
Log.d("Network is connected. Executing TheTask()", "OK");
new TheTask().execute("http://somedomain.tld/index.php?userId=12345678");
}
if (networkInfo == null) {
Log.d("Network is NOT connected.", "FAIL");
}
}
class TheTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... arg0) {
String text = null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(arg0[0]);
HttpResponse resp = httpclient.execute(httppost);
HttpEntity ent = resp.getEntity();
text = EntityUtils.toString(ent);
} catch (Exception e) {
e.printStackTrace();
}
return text;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
String tocheck = "Some text";
if(result.contains(tocheck))
{
Log.d("string contains some text", result);
}
}
}
}
AndroidManifest.xml
<receiver android:name=".SmsReceiver" android:enabled="true" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
Я использую 3G-сети. Это может быть связано с отключением сети. Если да, есть ли способ обхода AsyncTask, когда мой телефон снова получит сеть передачи данных?
EDIT:
Обернул AsyncTask в IsConnected. Теперь, если телефон не подключен к Интернету & Получаю SMS AsyncTask не будет выполнен. В этой ситуации я хочу использовать ScheduledExecutorService, чтобы запланировать AsynckTask будет выполнен 4 раза с интервалом 5 минут в течение следующих 20 минут. Я буду очень признателен, если кто-нибудь сможет мне помочь в этом.
Прошу прощения, я плохо разбираюсь в английском. Я действительно ценю ваши усилия для ответа. – Aman
Прошу прощения, я плохо разбираюсь в английском. Я очень ценю ваши усилия для ответа. Здесь я снова объясняю проблему, с которой я столкнулся. Я пытаюсь выполнить AsyncTask всякий раз, когда получаю SMS. Код работает отлично, когда мобильные данные телефона включены и когда в диапазоне Wi-Fi. Но во время вождения или между вызовами, иногда мобильные данные могут быть отключены. В этом случае я хочу отложить вызов AsyncTask для выполнения, когда мой телефон входит в диапазон Wifi или подключается к Mobile Data. Ofcourse SMS_RECEIVED запускается каждый раз при получении SMS. – Aman
Попробуйте использовать NetworkInfo.isConnected(), чтобы узнать, есть ли активное сетевое подключение: http://developer.android.com/reference/android/net/NetworkInfo.html#isConnected() – Buddy