android 實時監測網絡變化

最近給自己擼的APP添加網絡的監聽,具體實現如下:

我們利用廣播接收器來實現
23以後manager.getNetworkInfo(Type類型)方法不能用了,所以要區分

public class NetWorkStateReceiever extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("NetWork", "onReceive: "+intent.getAction() );
        //android.net.conn.CONNECTIVITY_CHANGE
        //sdk 23以下的情況
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){
            ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo wifiNet = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            NetworkInfo mobileNet = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            if (wifiNet.isConnected()){
                Toast.makeText(context, "wifi已連接", Toast.LENGTH_SHORT).show();
            }else if (!wifiNet.isConnected() && mobileNet.isConnected()){
                Toast.makeText(context, "已切換至運營商網絡,請注意網絡消耗", Toast.LENGTH_SHORT).show();
            }else if (!wifiNet.isConnected() && !mobileNet.isConnected()){
                Toast.makeText(context, "當前無網絡,請打開網絡開關", Toast.LENGTH_SHORT).show();
            }
        }else {
            ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            Network[] allNetworks = manager.getAllNetworks();
            for (int i = 0; i < allNetworks.length; i++) {
                //獲取ConnectivityManager對象對應的NetworkInfo對象
                NetworkInfo networkInfo = manager.getNetworkInfo(allNetworks[i]);
                if (networkInfo.getTypeName().equals("WIFI") && networkInfo.isConnected()){
                    Toast.makeText(context, "Wifi已連接", Toast.LENGTH_SHORT).show();
                    return;

                }else {
                    Toast.makeText(context, "Wifi未連接", Toast.LENGTH_SHORT).show();
                }

            }

        }
    }
}

然後靜態註冊:注意添加action,android.net.conn.CONNECTIVITY_CHANGE

<receiver android:name=".service.NetWorkStateReceiever">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
            </intent-filter>
        </receiver>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章