Adr*_*ian 0 android networkinfo android-connectivitymanager
我已经为“ CONNECTIVITY_CHANGE”广播了接收器。当我用这个打印多余的东西时:
intent.getExtras().toString()
Run Code Online (Sandbox Code Playgroud)
我可以看到,如果禁用WIFI,则会收到2次网络更改。
但是,当我尝试使用
NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
Run Code Online (Sandbox Code Playgroud)
它说,此API已被弃用。在那之后,我试图用这个
int networkType = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_TYPE);
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(networkType);
Run Code Online (Sandbox Code Playgroud)
但是,getNetworkInfo也已被弃用。
他们给我的唯一选择是使用getActiveNetworkInfo或getActiveNetwork。
如果使用它,我将获得2次广播,这将给我相同的网络信息。
有没有更好的方法来处理Android中的网络状态?
特别提示:
感谢您的快速回复,但是我没有寻找一种检查是否可以连接互联网的方法。
我需要知道哪个网络已断开连接。我正在寻找网络状态更改。
小智 6
这是一个简单的代码段,可帮助您确定用户在其设备上具有哪种互联网连接。
首先,我们需要以下权限才能访问网络状态。向您的AndroidManifest.xml文件添加以下权限。
访问网络状态所需的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)
现在检查以下实用程序类NetworkUtil。它具有方法getConnectivityStatus,该方法根据当前网络连接返回一个int常量。如果启用了wifi,则此方法将返回TYPE_WIFI。对于移动数据网络,类似的是返回TYPE_MOBILE。你有主意!
还有一个方法getConnectivityStatusString,它以更易读的字符串形式返回当前网络状态。
创建一个类NetworkUtil.java并粘贴以下代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以随时在Android应用中使用此实用工具类来检查设备的网络状态。
广播接收器处理网络状态的更改
您可以通过创建自己的广播接收器轻松处理网络状态的更改。以下是广播接收器类,我们在其中处理网络变化。
检查onReceive()方法。网络状态更改时将调用此方法。在这里,我们只是创建一条Toast消息并显示当前网络状态。您可以在此处编写自定义代码来处理连接状态的更改。
创建一个类NetworkChangeReceiver.java并粘贴以下代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
定义BroadcastReceiver之后,我们需要在AndroidMenifest.xml文件中定义相同的对象。将以下内容添加到清单文件中。
<application ...>
...
<receiver
android:name="YOUR PACKAGE NAME"
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>
...
</application>
Run Code Online (Sandbox Code Playgroud)
我们在清单文件中定义了广播接收器类。我们还定义了两个意图CONNECTIVITY_CHANGE和WIFI_STATE_CHANGED。因此,这将为给定的意图注册我们的接收者。只要网络状态发生变化,Android就会触发这些意图,并会调用我们的广播接收器。
就是运行您的代码了。希望这可以达到您的目的!
| 归档时间: |
|
| 查看次数: |
11924 次 |
| 最近记录: |