Android 安卓-当WiFi开启且互联网丢失时,需要帮助触发
我是安卓系统中的一只新蜜蜂。我想知道,当WiFi处于连接状态且互联网连接丢失时,是否有任何方式可以得到通知(如连接状态更改的广播接收器) 我尝试为我的接收者使用清单文件中更改的连接。虽然连接了WiFi,但无法识别是否丢失了互联网连接 我需要它发生在后台,这样我就可以登录到我们的服务提供商页面访问互联网 请帮助我如何完成这件事 编辑:虽然WiFi仍处于连接状态,但当internet连接丢失时,我的接收器(在清单中注册以更改连接)不会被呼叫。我不想开始一项活动。相反,我希望在收到此通知时在后台运行(Asynchtask) 提前谢谢Android 安卓-当WiFi开启且互联网丢失时,需要帮助触发,android,Android,我是安卓系统中的一只新蜜蜂。我想知道,当WiFi处于连接状态且互联网连接丢失时,是否有任何方式可以得到通知(如连接状态更改的广播接收器) 我尝试为我的接收者使用清单文件中更改的连接。虽然连接了WiFi,但无法识别是否丢失了互联网连接 我需要它发生在后台,这样我就可以登录到我们的服务提供商页面访问互联网 请帮助我如何完成这件事 编辑:虽然WiFi仍处于连接状态,但当internet连接丢失时,我的接收器(在清单中注册以更改连接)不会被呼叫。我不想开始一项活动。相反,我希望在收到此通知时在后台运行(
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager
= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
这会回来的
true
如果连接了wi-fi/移动数据且互联网连接处于活动状态
false
如果已连接wi-fi/移动数据,但无法访问互联网
false
如果wi-fi和移动数据根本未连接
为了在Internet连接丢失时得到通知,我建议的一种方法是启动一个运行上面写的isNetworkAvailable()方法的服务。您可以每秒钟运行一次(或者5秒就可以了),当它返回false调用自定义BroadcastReceiver时,您可以在该BroadcastReceiver的“onReceive”上生成通知。确保在“true”之后第一次返回“false”时创建通知
这可能不是最好的方法,但我想这不会减慢你的应用程序的速度。希望每5秒或更长时间调用一次。为网络状态创建一个类:
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetworkUtil {
public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 2;
public static int TYPE_NOT_CONNECTED = 0;
public static int getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (null != activeNetwork) {
if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
return TYPE_WIFI;
if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
return TYPE_MOBILE;
}
return TYPE_NOT_CONNECTED;
}
public static String getConnectivityStatusString(Context context) {
int conn = NetworkUtil.getConnectivityStatus(context);
String status = null;
if (conn == NetworkUtil.TYPE_WIFI) {
status = "Wifi enabled";
} else if (conn == NetworkUtil.TYPE_MOBILE) {
status = "Mobile data enabled";
} else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
status = "Not connected to Internet";
}
return status;
}
}
广播接收机:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
String status = NetworkUtil.getConnectivityStatusString(context);
Toast.makeText(context, status, Toast.LENGTH_LONG).show();
}
}
Menifest文件:
<application ...>
...
<receiver
android:name="your_package_name.NetworkChangeReceiver"
android:label="NetworkChangeReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
...
...
...
您想触发“Internet可用”的网络状态,还是想获取WiFi和网络更改的状态?我想在Internet连接断开时触发,以便在ISP页面中执行登录任务。WiFi仍然连接。我刚刚用广播接收器回答了问题,请查看。这对我很有效,我也在尝试同样的方法。这对我没有帮助(没有得到通知)。我会试试你的代码。即使我的活动/ui未运行,我也需要触发器。由于这个原因,我试图在舱单中注册我的接收者。谢谢你花时间来帮助我。对不起,我把你弄糊涂了。我已连接WiFi,但由于某些原因(可能是由于宽带ISP服务器已关闭,或需要登录才能访问internet),无法访问internet。在这种情况下,我需要得到通知才能在后台执行登录。如果你需要澄清,请告诉我。另外,我不知道我在哪里可以ping你。我需要的是一个通知,告诉我互联网连接不存在。即使没有UI在运行,我如何在后台获得它?@user6825303我可以建议的一种方法是启动一个运行
isNetworkAvailable()
我上面回答的方法的服务。您可以每秒运行一次,当它返回false调用一个自定义的BroadcastReceiver
和该BroadcastReceiver
的“onReceive”时,您可以构建一个通知。请确保您在第一次返回'true(s)'之后的'false'时创建通知。我会尝试一下,如果我得到什么,请发布。非常感谢。请让我知道,如果有更好的方法(无需每秒钟不断检查)。