最近项目需求,需要android同时可以访问内网以及外网,即不同的通信走不同的网络,查阅相关资料后确定可行,但需一定的条件

1. 前提必备条件:

1) 控制板搭载的android系统版本需要5.0以上
2) 控制板搭载的android系统需要同时支持多网络连接共存,即满足wifi网络,移动网络,网卡能够同时连接且分配到各自网络的IP地址,不能出现连接一个网络后自动将另一个网络断开(反例:当前控制板连接WiFi,但在网口接入网络后自动断开并关闭WIFI连接,且之后无法手动连接WIFI)。

2. 使用系统提供的API进行网络连接时自定义选择相应的网络(示例代码如下)

final ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);        //需要android 系统5.0以上        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && connectivityManager != null) {            NetworkRequest.Builder builder = new NetworkRequest.Builder();            //选择连接数据走的网络,这里示例为WiFi,可根据不同的连接需要选择不同的网络即可            builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);            NetworkRequest networkRequest = builder.build();            connectivityManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback() {                @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)                @Override                public void onAvailable(final Network network) {                    super.onAvailable(network);                    //网络接通后                    SocketFactory socketFactory = network.getSocketFactory();                    //如果使用eclipse MQTT 包,则需设置                    mqttConnectOptions.setSocketFactory(socketFactory);                    //如果使用常规的网络连接,okhttp ,则需设置                    OkHttpClient okHttpClient = new OkHttpClient.Builder()                            //.proxy(Proxy.NO_PROXY)                            .socketFactory(socketFactory)                            .dns(new Dns() {                                @Override                                public List lookup(@NonNull String hostname) throws UnknownHostException {                                    return Arrays.asList(network.getAllByName(hostname));                                }                            })                            .build();                    Retrofit retrofit = new Retrofit.Builder()                            .client(okHttpClient)                            .baseUrl("http://wanandroid.com/")                            .addConverterFactory(ScalarsConverterFactory.create())                            .build();                    apiService = retrofit.create(ApiService.class);                    showMsg("网络已连接  ");                }            });        }

更多相关文章

  1. [置顶] android中图片的三级cache策略(内存、文件、网络)之二:内存
  2. Android开发调试无法连接到夜神模拟器的解决方法
  3. Android下使用ACE开源网络库
  4. Ohone SDK的模拟器居然不能联网??
  5. 编程回忆之Android回忆(蓝牙BluetoothAdapter的搜索和连接)
  6. android 获取网络图片缓存(内存—>文件—>网络)
  7. Android设备通过网络adb 调试
  8. Android(安卓)开发自己的网络收音机1——功能要求及设计方案
  9. Android(安卓)网络状态监听那些事

随机推荐

  1. HTML5/CSS3系列教程:使用SVG图片
  2. 使用JQuery基于div / section更改的ADD /
  3. IE中页面不居中,火狐谷歌等正常
  4. 将文本从表单复制到另一个网站的文本字段
  5. Web 应用程序学习笔记
  6. vim set 转自http://blog.sina.com.cn/s/
  7. css工具提示提示 - 顶部不起作用
  8. Webkit之理解HTML解析和DOM树
  9. HTML5实现图片预览功能
  10. “div > p”和“div p”是一样的吗?