Android 安卓-当WiFi开启且互联网丢失时,需要帮助触发

Android 安卓-当WiFi开启且互联网丢失时,需要帮助触发,android,Android,我是安卓系统中的一只新蜜蜂。我想知道,当WiFi处于连接状态且互联网连接丢失时,是否有任何方式可以得到通知(如连接状态更改的广播接收器) 我尝试为我的接收者使用清单文件中更改的连接。虽然连接了WiFi,但无法识别是否丢失了互联网连接 我需要它发生在后台,这样我就可以登录到我们的服务提供商页面访问互联网 请帮助我如何完成这件事 编辑:虽然WiFi仍处于连接状态,但当internet连接丢失时,我的接收器(在清单中注册以更改连接)不会被呼叫。我不想开始一项活动。相反,我希望在收到此通知时在后台运行(

我是安卓系统中的一只新蜜蜂。我想知道,当WiFi处于连接状态且互联网连接丢失时,是否有任何方式可以得到通知(如连接状态更改的广播接收器)

我尝试为我的接收者使用清单文件中更改的连接。虽然连接了WiFi,但无法识别是否丢失了互联网连接

我需要它发生在后台,这样我就可以登录到我们的服务提供商页面访问互联网

请帮助我如何完成这件事

编辑:虽然WiFi仍处于连接状态,但当internet连接丢失时,我的接收器(在清单中注册以更改连接)不会被呼叫。我不想开始一项活动。相反,我希望在收到此通知时在后台运行(Asynchtask)

提前谢谢

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'时创建通知。我会尝试一下,如果我得到什么,请发布。非常感谢。请让我知道,如果有更好的方法(无需每秒钟不断检查)。