Android - 在 BroadcastReceiver 的帮助下检查互联网和 Wi-Fi 连接?
Android - check internet and Wi-Fi connectivity with the help of BroadcastReceiver?
我想检查互联网和 Wi-Fi 连接。我已经实现了代码。但是在这段代码中,问题是,当我在我的设备中激活 Wi-Fi 时,它会连续敬酒 "Wi-Fi disconnected" 和 "Internet Connected" 3-4 次,然后最后一次敬酒 "Wi-Fi connected" 然后我的 Wi-Fi 连接在我的设备中显示为已启用。当我启用或禁用 Wi-Fi 时,我只需要检查一次 Wi-Fi 连接。
谢谢
Java
public class ConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean isConnectedInternet =
intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
ConnectivityManager wifiConn =
(ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = wifiConn.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi.isConnected()) {
Toast.makeText(context, "Wifi Conected", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(context, "Wifi disconnected", Toast.LENGTH_LONG).show();
}
if(isConnectedInternet){
Toast.makeText(context, "Internet Connection Lost", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(context, "Internet Connected", Toast.LENGTH_LONG).show();
}
}
}
月经
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<receiver android:name=".ConnectionReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
我不太清楚,但可能是您一次性收到所有事件(CONECTIVITY_CHANGE、WIFI_STATE_CHANGED 和 STATE_CHANGE)。以我的理解 CONNECTIVITY_CHANGE 应该足够了。您应该阅读开发文档中的详细信息。
从清单中删除这两行:
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />
查看文档:http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION
我有我的连接,你可以使用它..
public class ConnectionDetector {
private Context _context;
public ConnectionDetector(Context context){
this._context = context;
}
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;
}
}
在你的 activity..
if (new ConnectionDetector(this).isConnectingToInternet()){
Toast.makeText(context, "Wifi Conected", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(context, "Wifi disconnected", Toast.LENGTH_LONG).show();
}
我想检查互联网和 Wi-Fi 连接。我已经实现了代码。但是在这段代码中,问题是,当我在我的设备中激活 Wi-Fi 时,它会连续敬酒 "Wi-Fi disconnected" 和 "Internet Connected" 3-4 次,然后最后一次敬酒 "Wi-Fi connected" 然后我的 Wi-Fi 连接在我的设备中显示为已启用。当我启用或禁用 Wi-Fi 时,我只需要检查一次 Wi-Fi 连接。 谢谢
Java
public class ConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean isConnectedInternet =
intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
ConnectivityManager wifiConn =
(ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = wifiConn.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi.isConnected()) {
Toast.makeText(context, "Wifi Conected", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(context, "Wifi disconnected", Toast.LENGTH_LONG).show();
}
if(isConnectedInternet){
Toast.makeText(context, "Internet Connection Lost", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(context, "Internet Connected", Toast.LENGTH_LONG).show();
}
}
}
月经
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<receiver android:name=".ConnectionReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
我不太清楚,但可能是您一次性收到所有事件(CONECTIVITY_CHANGE、WIFI_STATE_CHANGED 和 STATE_CHANGE)。以我的理解 CONNECTIVITY_CHANGE 应该足够了。您应该阅读开发文档中的详细信息。
从清单中删除这两行:
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />
查看文档:http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION
我有我的连接,你可以使用它..
public class ConnectionDetector {
private Context _context;
public ConnectionDetector(Context context){
this._context = context;
}
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;
}
}
在你的 activity..
if (new ConnectionDetector(this).isConnectingToInternet()){
Toast.makeText(context, "Wifi Conected", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(context, "Wifi disconnected", Toast.LENGTH_LONG).show();
}