Я работаю над приложением, которое выполняет только некоторые безопасные операции, когда приложение подключено к мобильной сети передачи данных. Я пытаюсь получить приложение, чтобы заставить все это сетевой трафик по конкретной сети, так что я смотрю на эту апи вызов добавляется в уровне 21: http://developer.android.com/reference/android/net/ConnectivityManager.html#setProcessDefaultNetwork(android.net.Network)setProcessDefaultNetwork всегда возвращает false
Network[] networks = cm.getAllNetworks();
for (int i = 0; i < networks.length; i++) {
NetworkInfo netInfo = cm.getNetworkInfo(networks[i]);
if (netInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
foundMobile = true;
Log.d("ANDREW", "Found potential network: setting default...");
result = ConnectivityManager.setProcessDefaultNetwork(networks[i]);
Log.d("ANDREW", "Result: " + result);
}
if (result) {
Log.d("ANDREW", "Success! Restricted to: " + netInfo.toString());
break;
}
}
В основном я получаю все поддерживаемые сети для устройство, проверив их все и выяснив, являются ли какие-либо из них мобильными сетями, а затем пытается установить сеть по умолчанию. Он находит мобильную сеть, но никогда не удается установить ее как сеть по умолчанию. Результат не верн., И дальнейшие результаты:
Network defProcNetwork = ConnectivityManager.getProcessDefaultNetwork();
также являются равными нулю.
Я также попробовал альтернативный метод, упаковывает в сеть просто не доступен на основе другого SO ответа я увидел:
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkRequest.Builder builder = new NetworkRequest.Builder();
builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
NetworkCallback networkCallback = new NetworkCallback() {
@Override
public void onAvailable(Network network) {
Log.d("ANDREW", "Network is available!");
boolean result = ConnectivityManager.setProcessDefaultNetwork(network);
Log.d("ANDREW", "RESULT: " + result);
if (ConnectivityManager.getProcessDefaultNetwork() != null) {
Log.d("ANDREW", "Successfully set default network ");
}
}
};
NetworkRequest networkRequest = builder.build();
connectivityManager.requestNetwork(networkRequest, networkCallback);
connectivityManager.registerNetworkCallback(networkRequest, networkCallback);
Я получаю обратный вызов isAvailable, но он по-прежнему не может установить по умолчанию сеть.
Нет сообщений журнала, с которыми можно работать, я даже посмотрел на собственный код, и нет ничего, чтобы указать, что не так. SDK не описывает каких-либо дополнительных шагов, которые я могу видеть, поэтому мой вопрос: почему это всегда возвращает false и что именно разработчик должен делать, чтобы заставить это работать? Я пробовал это как на Nexus 5, так и на Nexus 6.
Для получения кредита альтернативный метод был найден здесь: http://stackoverflow.com/questions/25931334/send-request-over-mobile-data-when-wifi-is-on-android-l –