Как пользоваться услугой мобильной передачи данных при подключенном WiFi? - PullRequest
0 голосов
/ 12 февраля 2019

Я занимаюсь разработкой тестового приложения, которое должно иметь возможность выбирать WiFi или Mobile для передачи данных.В следующем коде показано, что сети Wi-Fi и Mobile подключены, но bindProcessToNetwork () не работает в сети Mobile.

public class MyActivity extends AppCompatActivity {
    private ConnectivityManager mConnMgr = null;
    private Network mNetworkWiFi = null;
    private Network mNetworkMobile = null;

    mConnMgr =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean isWifiConn = false;
    boolean isMobileConn = false;
    for (Network network : mConnMgr.getAllNetworks()) {
        NetworkInfo networkInfo = mConnMgr.getNetworkInfo(network);

        if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
            isWifiConn = networkInfo.isConnected();
            mNetworkWiFi = network;
        }
        if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
            isMobileConn = networkInfo.isConnected();
            mNetworkMobile = network;
        }
    }

    if (mNetworkMobile && mConnMgr.getNetworkInfo(mNetworkMobile).isConnected()) {
        if (true != mConnMgr.bindProcessToNetwork(mNetworkMobile)) {
            Log.i(TAG, "Failed to bind to Mobile");
        }
    }

Вопросы: 1. Является ли bindProcessToNetwork () правильным способом выбора службы данных между WiFi и Mobile?2. Что могло вызвать сбой bindProcessToNetwork () в подключенной мобильной сети?

1 Ответ

0 голосов
/ 14 февраля 2019

Следующий код позволяет мне использовать службу передачи данных MObile при подключенном WiFi:

                final NetworkRequest networkReq = new NetworkRequest.Builder().addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).build();
                mConnMgr.requestNetwork(networkReq, new ConnectivityManager.NetworkCallback() {
                    @Override
                    public void onAvailable(Network network) {
                        Log.i(TAG, "Requested netwwork available: " + network.toString());
                        if (true != mConnMgr.bindProcessToNetwork(network)) {
                            Log.i(TAG, "Failed to bind to Mobile");
                        }

                    }
                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...