最近开发一个项目,要求一个安卓设备同时接入两个无线网络。如果直接使用两块无线网卡,在驱动和应用层以及安卓框架中都会遇到问题,因此,选择了一款同时具备有线网卡和无线网卡的安卓开发板,然后再使用一块OpenWrt核心板将有线网络转换成无线网络,并实现透传。开发App的时候,发现安卓会为App选择一个默认优先级最高的网络,因此同时连接有线和无线时,应用的数据默认不走有线网口,下面介绍一种解决方案。
代码
if (Build.VERSION.SDK_INT >= 21) {
final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder builder = new NetworkRequest.Builder();
// 设置指定的网络传输类型(蜂窝传输) 等于手机网络
builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
// 设置感兴趣的网络功能
// builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
// 设置感兴趣的网络:计费网络
// builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
NetworkRequest request = builder.build();
ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
/**
* Called when the framework connects and has declared a new network ready for use.
* This callback may be called more than once if the {@link Network} that is
* satisfying the request changes.
*
*/
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onAvailable