android中检查互联网是不是持续活动的最佳方法是啥(当互联网不活动时)? [复制]

Posted

技术标签:

【中文标题】android中检查互联网是不是持续活动的最佳方法是啥(当互联网不活动时)? [复制]【英文标题】:What is the best way in android to check if internet is active continiously(when the internet is inactive)? [duplicate]android中检查互联网是否持续活动的最佳方法是什么(当互联网不活动时)? [复制] 【发布时间】:2017-05-16 18:17:53 【问题描述】:

我正在构建一个 android 应用程序,它会在互联网连接再次处于活动状态时通知用户。当互联网不工作时,他/她必须启用该功能。做这个的最好方式是什么?目前,我正在服务中向 google 运行无限循环 ping 请求,但在数千个请求后它不会继续。有没有更简单或更好的方法来实现这一目标?谢谢你。

编辑: 大多数答案和参考资料仅在我的设备连接到 Wifi 时检查。但是,如果我的设备已连接到我的路由器但互联网连接不工作怎么办?

【问题讨论】:

阅读此developer.android.com/training/monitoring-device-state/… 我打赌这个问题在锁定之前会得到 6 个或更多答案:D 你输了。我们赌什么? :) @Gabe Sechan bah .. 你来得太早了 ^_^ 我打赌了吗,我不记得 muhahaa 【参考方案1】:

我每次都使用广播来检查连接。为连接信息创建一个类。

import android.content.Context;
import android.content.ContextWrapper;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;


public class ConnectivityStatus extends ContextWrapper

    public ConnectivityStatus(Context base) 
        super(base);
    

    public static boolean isConnected(Context context)

        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo connection = manager.getActiveNetworkInfo();
        if (connection != null && connection.isConnectedOrConnecting())
            return true;
        
        return false;
    

将代码应用到您的活动中:

 private BroadcastReceiver receiver = new BroadcastReceiver() 
 @Override
 public void onReceive(Context context, Intent intent) 
        if(!ConnectivityStatus.isConnected(getContext()))
            // no connection
        else 
            // connected
        
    
 ;

在您的活动的onCreate() 方法中注册广播:

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    ..
    ...
    ....
  

不要忘记在活动周期取消注册/注册:

@Override
protected void onResume() 
    super.onResume();
    your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));



@Override
protected void onPause() 
    super.onPause();
    your_activity_context.unregisterReceiver(receiver);


【讨论】:

【参考方案2】:

您可以使用广播接收器连续检查 Internet 可用性。当 Internet 可用时,接收方会通知您。

访问此页面,它可以帮助您 :Broadcast receiver for checking internet connection in android app

【讨论】:

【参考方案3】:

向 go​​ogle.com 创建一个简单的 ping 请求,并在活动中使用 volley 或其他一些网络库运行后台线程以保持 ping。在响应时,检查网络响应代码。如果是服务器错误代码(5xx 系列),则您的互联网不可用。如果您获得 OK 代码(2xx 系列),则您的互联网连接正常。对于这两种情况,请保持 500 毫秒的重试延迟并继续收集网络可用性响应。

或者,使用 Android 网络管理器。这个类可以实现如下:

public class NetworkConnectivity 
    Context context;

    private Context _context;

    public NetworkConnectivity(Context context)
        this._context = context;
    

    public boolean isNetworkConnected()
        ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null)
        
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
                for (int i = 0; i < info.length; i++)
                    if (info[i].getState() == NetworkInfo.State.CONNECTED)
                    
                        return true;
                    

        
        return false;
    

每隔 500 毫秒从后台线程调用一次isNetworkConnected(),并根据您想要使用有关连接状态的知识来使用响应(true 表示已连接,false 表示未连接)。

【讨论】:

以上是关于android中检查互联网是不是持续活动的最佳方法是啥(当互联网不活动时)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]

如何关闭android活动中的警报?

检查活动的互联网连接 Android

检查 Android 中的 *** 连接是不是处于活动状态?

如何在android中检查3g是不是处于活动状态

保存可以在android应用程序的所有活动中访问的数组的最佳方法是啥?