gpt4 book ai didi

java - 有时 Android BroadcastReceiver 不起作用

转载 作者:行者123 更新时间:2023-11-29 20:52:21 25 4
gpt4 key购买 nike

在阅读了很多关于 SOF 和博客文章的主题之后,我已经让 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 中。现在,如果手机未连接到互联网并且我收到短信,则 AsyncTask 将不会执行。在那种情况下,我想使用 ScheduledExecutorService 安排 AsynckTask 在接下来的 20 分钟内以 5 分钟的间隔执行 4 次。如果有人能在这方面帮助我,我将不胜感激。

最佳答案

我无法确定断开连接,因为您没有提供任何堆栈跟踪。但我很确定当您收到短信时,SMS_RECEIVED 广播操作正在系统范围内广播。现在,如果您由于连接不良或根本没有连接而没有收到 SMS,那么系统不会触发 SMS_RECEIVED 操作是完全合乎逻辑的,因为没有收到 SMS。

至于

is there any workaround to execute AsyncTask when my phone again get data network

你可以实现另一个广播接收器来监听 network changes但这似乎不是一个好主意。您应该尝试重现问题并检查堆栈跟踪中是否存在任何异常。

is something is wrong in the code.

您的接收器似乎已在您的 list 中正确注册,onReceive() 方法似乎正确启动了 AsyncTaskdoInBackground 似乎没有任何问题,onPostExecute(尽管官方示例似乎省略了对 super 的任何调用)似乎没问题。

结论:尝试重现问题并从堆栈跟踪中收集有关可能导致错误的原因的数据(网络开销可能是原因之一,但这只是推测)。

关于java - 有时 Android BroadcastReceiver 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28793363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com