阅读了很多有关SOF& amp;博客文章,我有BroadcastReceiver工作。但是我注意到它有时不起作用,特别是当我在电话中时。我只是想知道,如果我在通话之间收到短信,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?
修改
将 AsyncTask 包含在 isConnected 中。现在,如果手机没有连接到互联网&amp;我收到短信 AsyncTask 将不会被执行。在这种情况下,我想使用 ScheduledExecutorService 来安排 AsynckTask 在接下来的20分钟内以5分钟的间隔执行4次。我将非常感激,任何人都可以帮助我。
答案 0 :(得分:2)
我无法确定断开连接,因为您还没有提供任何堆栈跟踪。但是我很确定当你收到短信时,系统正在广播SMS_RECEIVED广播动作。现在,如果由于连接错误或根本没有连接而没有收到短信,那么系统不会触发SMS_RECEIVED操作是完全合乎逻辑的,因为没有收到短信。
至于
当手机再次出现时,是否有任何解决方法可以执行AsyncTask 数据网
你可以实现另一个将收听network changes的广播接收器,但这看起来并不是一个好主意。您应该尝试重现问题并检查堆栈跟踪中的任何异常。
代码中有问题。
您的接收器似乎已在您的清单中正确注册,
onReceive()
方法似乎正在启动AsyncTask
,
doInBackground
似乎没有任何问题,onPostExecute
(虽然官方示例似乎省略了对超级的任何调用)似乎没问题。
结论:尝试重现问题并从堆栈跟踪中收集可能导致错误的数据(网络开销可能是原因之一,但这只是猜测)。< / p>