【问题标题】:broadcast receiver before internet disconnects互联网断开前的广播接收器
【发布时间】:2016-07-10 19:32:49
【问题描述】:

我想知道在 android 上是否有可能在用户单击 wifi 断开按钮运行方法后在设备断开互联网之前获得广播,我已经在使用广播接收器来捕捉网络变化但是它在互联网断开后执行我使用下面的代码:

public class InternetReceiver extends BroadcastReceiver {

@Override
public void onReceive(final Context context, final Intent intent) {
    if (isNetworkAvailable(context) && !isMyServiceRunning(MessagingService.class,context)){
        Intent i = new Intent(context,MessagingService.class);
        context.startService(i);
        Log.e("service started ","true");
    }

}

private boolean isMyServiceRunning(Class<?> serviceClass, Context c) {
    ActivityManager manager = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}


public boolean isNetworkAvailable(Context c) {
    ConnectivityManager connectivityManager
            = (ConnectivityManager)  c.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}

我使用上面的代码在连接互联网后运行服务,但这只是一个示例

【问题讨论】:

    标签: java android sockets server


    【解决方案1】:

    编辑:我假设您想对用户点击 wifi 断开按钮做出反应

    您可以使用 Android 的 WifiManager 检查 wifi 连接的状态,它提供了一些可能性来获取有关您的 wifi 环境和连接的信息。

    可以建立或断开连接,可以查询网络状态的动态信息。

    来源:http://developer.android.com/reference/android/net/wifi/WifiManager.html

    请看以下内容。我想它会对你有所帮助。

    WIFI_STATE_CHANGED_ACTION 广播意图操作,指示 Wi-Fi 已启用、禁用、启用、禁用或未知。

    int WIFI_STATE_DISABLED Wi-Fi 已禁用。

    int WIFI_STATE_DISABLING Wi-Fi 当前被禁用。

    【讨论】:

    • heyRobin 感谢您的回答,问题是如果我在禁用 wifi 时获得广播,是否会在互联网断开后?如果在断开互联网之前发送了 wifi 禁用,这仍然不能保证互联网断开会等到调用的方法完成,还是会这样??
    • 我无法告诉你订单的表现如何,你必须尝试一下。我认为在执行应用程序中的调用方法之前,不可能阻止 android 断开连接。是否有可能以另一种方式实现您的目标?
    • 好吧,事情是我的应用程序已连接到套接字服务器并且在互联网断开连接时我想通过发送一个小包来通知服务器,告诉服务器关闭其一侧的套接字,因为如果我不服务器没有检测到打开的套接字无效,稍后会尝试传输数据:/
    • 我刚刚尝试使用 WIFI_STATE_DISABLING 并且正在调用它的那一刻设备已经失去了网络访问权限
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多