在Android 5.x版的APP內榜定溝通的網路介面卡



        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        if (cm != null) {
            Log.d(TAG,"try to bind ethernet for app");
            Network[] allnet = cm.getAllNetworks();
            if (allnet==null || allnet.length==0) {
                Log.e(TAG,"Failed to getAllNetworks from ConnectivityManager");
            } else {
                boolean isBinded = false;
                Log.d(TAG,"getNetworkInfo() : " + allnet.length);
                for (Network net : allnet) {
                    NetworkInfo info = cm.getNetworkInfo(net);
                    LinkProperties lnk = cm.getLinkProperties(net);
                    if (lnk != null) {
                        Log.d(TAG, "Interface:   " + lnk.getInterfaceName());
                        List addr = lnk.getLinkAddresses();
                        for (LinkAddress a : addr) {
                            Log.d(TAG, "  addr: " + a.toString());
                        }
                        List route = lnk.getRoutes();
                        for (RouteInfo r : route) {
                            if (r.isDefaultRoute()) {
                                Log.d(TAG, "  default route: content={" + r.toString() + "}");
                            } else {
                                Log.d(TAG, "  route: content={" + r.toString() + "}");
                            }
                        }
                    } else {
                        Log.e(TAG,"LinkProperties is null");
                    }
                    if (info != null) {
                        Log.d(TAG, "Type:        " + info.getTypeName());
                        Log.d(TAG, "State:       " + info.getState());
                        Log.d(TAG, "isAvailable: " + info.isAvailable());
                        Log.d(TAG, "isConnected: " + info.isConnected());
                        if (info.getType() == ConnectivityManager.TYPE_ETHERNET) {
                            Log.d(TAG, "Found ethernet for binding");
                            //isBinded = cm.bindProcessToNetwork(net);
                            isBinded = ConnectivityManager.setProcessDefaultNetwork(net);
                            if (isBinded) {
                                Log.d(TAG,"Ethernet binded! bind network={" + net.toString() + "}");
                                break;
                            }
                        }
                    } else {
                        Log.e(TAG,"NetworkInfo is null");
                    }
                }
                if (!isBinded) {
                    Log.e(TAG,"Cannot bind eth0 for binding");
                }
            }
        } else {
            Log.e(TAG,"Failed to bind process to eth0");
        }

留言