广播接收器正在正常工作,但每当我打开wifi并且有正确的互联网连接时,它总是返回false或者什么都不做。我该如何解决这个问题......以下是我的代码!谢谢你的帮助
public class NetworkChangeReceiver extends BroadcastReceiver {
IvrsPushService isp;
DatapushService dsp;
boolean status;
HttpURLConnection urlc;
@Override
public void onReceive(final Context context, final Intent intent)
{
new Thread() {
@Override
public void run() {
status =hasActiveInternetConnection(context);
}
}.start();
String str = Boolean.toString(status);
if (status==true)
{
Toast.makeText(context, "wifi enabled and working", Toast.LENGTH_SHORT).show();
ivrssendonnetworkconnection(context);
datasendonnetworkconnection(context);
//ivrssendonnetworkconnection(context);
//datasendonnetworkconnection(context);
}
else
{
Toast.makeText(context, "wifi is enabled but not working", Toast.LENGTH_SHORT).show();
}
String str1 = Boolean.toString(status);
Toast.makeText(context, str1, Toast.LENGTH_SHORT).show();
}
public void ivrssendonnetworkconnection(final Context context) {
}
public void datasendonnetworkconnection(final Context context) {
}
public void retrieveValuesFromListMethod1(List AssetId,Context context)
{
Iterator itr = AssetId.iterator();
while(itr.hasNext())
{
}
}
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
// if no network is available networkInfo will be null
// otherwise check if we are connected
if (networkInfo != null && networkInfo.isConnected()) {
return true;
}
return false;
}
public static boolean hasActiveInternetConnection(Context context) {
String LOG_TAG = "hello";
if (isNetworkAvailable(context)) {
try {
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
return (urlc.getResponseCode() == 200);
} catch (IOException e) {
Log.e(LOG_TAG, "Error checking internet connection", e);
}
} else {
Log.d(LOG_TAG, "No network available!");
}
return false;
}
public void retrieveValuesFromListMethod2(List Asset,Context context)
{
Iterator itr = Asset.iterator();
while(itr.hasNext())
{
//do something
}
}
}
答案 0 :(得分:1)
您将status
设置为false
。
boolean status =false;
您正尝试在另一个帖子中更改它。
new Thread() {
@Override
public void run() {
status =hasActiveInternetConnection(context);
}
}.start();
您检查时可能不会反映出这种变化。
在以这种方式使用线程之前,您需要了解一下java线程的工作原理。
这段代码有点不对劲。也许以下几点会让你走上正确的道路。
Thread
通常不是正确的选择。请改为考虑AsyncTask
或Handler
类。BroadcastReceiver
代码必须非常短,并快速执行。一个好的经验法则是在接收器中不执行任何操作,只需启动Service
或Activity
。将所有逻辑放入该服务/活动类中。考虑到这一点,您可以从接收器启动服务。在您的服务中,您可以使用AsyncTask
来检查您的连接。这将是一种更好的设计方法。