网络上的广播接收器状态在Android上改为TYPE_ETHERNET

时间:2014-02-10 08:49:40

标签: android

我正在编写一个需要检查以太网(RJ45)连接的应用程序。 为此目的,我使用广播接收器,但它只适用于连接状态,当我断开以太网(RJ45)时,我的应用程序挂起。

这是我的广播接收器代码和清单。

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        boolean isConnected ;
        ConnectivityManager networkConnectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

        final NetworkInfo networkInfo = networkConnectivity.getActiveNetworkInfo();


        if(networkInfo.getType() == ConnectivityManager.TYPE_ETHERNET)

            isConnected = true;

        else
            isConnected = false;
    }
}

清单

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

1 个答案:

答案 0 :(得分:3)

据我所知,您应该对活动网络信息进行空值检查。它在Android的API参考中声明

  

<强> public NetworkInfo getActiveNetworkInfo ()   返回有关当前活动的默认数据网络的详细信息连接时,此网络是传出连接的默认路由。在启动网络流量之前,您应该始终检查isConnected()。当没有默认网络时,这可能会返回null。

请查看以下代码。

    String action = intent.getAction();
    if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
        ConnectivityManager conMan = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = conMan.getActiveNetworkInfo();
        if (netInfo != null) {
            if (netInfo.getType() == ConnectivityManager.TYPE_ETHERNET) { 
                  // is connected 
            }
        } 
    }