如何检测用户何时在android中连接到wifi或移动互联网

Posted

技术标签:

【中文标题】如何检测用户何时在android中连接到wifi或移动互联网【英文标题】:How to detect when user connects to wifi or mobile internet in android 【发布时间】:2016-03-14 18:25:36 【问题描述】:

我想在用户每次连接互联网时检查特定更新。我尝试了以下代码:

unfortunately app is getting stopped while checking for network

Broadcast receiver for checking internet connection in android app

Manifest.xml

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<receiver android:name=".UpdateReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

Java

public class UpdateReceiver extends BroadcastReceiver 

    @Override
    public void onReceive(Context context, Intent intent) 
        ConnectivityManager connectivityManager = (ConnectivityManager) 
        context.getSystemService(Context.CONNECTIVITY_SERVICE );
        NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        boolean isConnected = activeNetInfo != null && activeNetInfo.isConnectedOrConnecting();   
        if (isConnected)       
            Log.i("NET", "connecte" +isConnected);   
        else Log.i("NET", "not connecte" +isConnected);
    

我的问题是这些代码只接收一次,如果用户断开 wifi 并重新连接广播接收器无法通知。感谢任何帮助。

【问题讨论】:

【参考方案1】:

在我的应用中实施检查后,查看是否有任何互联网连接。你可以看看这个--

public class ConnectionDetector 

private Context context;

public ConnectionDetector(Context cont)
this.context = cont;


public boolean isConnectingToInternet()
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;


您可以在 OnCreate 方法中初始化此类的对象。

最后在上传文件之前调用这个类的方法。

Boolean isInternetConnected = cd.isConnectingToInternet();
if (isInternetConnected)

    //perform your job here.

已编辑::

NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();

希望这会有所帮助。

【讨论】:

兄弟,当用户重新连接到互联网时,我需要识别(接收)通知现在我正在使用一个间隔为 10 分钟的计时器,我想避免计时器,并且在用户重新连接到互联网时需要 @SigmaEquties -- 在这种情况下,您可以将返回语句更改为在它表示第一个连接的网络接口时返回,或者如果没有连接任何接口,则返回 null。我已经修改了上面的答案。请检查已编辑的部分。

以上是关于如何检测用户何时在android中连接到wifi或移动互联网的主要内容,如果未能解决你的问题,请参考以下文章

设备在Android中连接到WiFi时如何获取蜂窝网络的IP地址

如何在bash中连接到wifi?

如果在 Android 中连接到 BLE 设备失败,如何通知用户?

如何检测系统是不是连接到 ad hoc 或基础设施 wifi?

检测 3G 或 Wifi 网络恢复

在 Java (Android) 中连接到 IOCP 服务器