Я ищу способ подключения планшета Android 5.0 к интрасети, которая не имеет подключения к Интернету по соображениям безопасности.Как указать сеть wifi с NetworkRequest.Builder(). SetNetworkSpecifier (string)
Проблема заключается в том, что защита порталов, созданная Google в Android, с 4,4/5,0. Вызов выполняется по адресу android connectivitycheck, чтобы проверить подключение к Интернету, когда этот вызов завершился неудачей, сеть Wi-Fi отмечена как не работающая и предотвращенная. Довольно хромой.
Другие столкнулись с той же проблемой, а некоторые предлагают использовать новый API, введенные в Android 5 см: Android 5.0 Lollipop and 4.4 KitKat ignores my WiFi network, enableNetwork() is useless
документация на это очень расплывчато:
NetworkRequest.Builder.setNetworkSpecifier(String networkSpecifier)
«Интерпретация Например, Bluetooth может использовать какой-либо идентификатор устройства, в то время как WiFi может использовать ssid и/или bssid. Сотовая связь может использовать несущую spn «
Я пробовал это, и он не работает. Основная проблема заключается в том, что после использования setNetworkSpecifier()
сеть не найдена. Я попытался использовать bssid
(mac) и ssid
точки доступа.
Похоже, фильтр работает, но неясно, как он должен работать. Если я ухожу из setNetworkSpecifier()
, то вызов сети 1 найден, но определить, какой из них определить невозможно. По крайней мере, это показывает, что мой код работает.
Так что я должен здесь вводить, если ssid и bssid не работают?
Вот мой код.
private void connect(String ssid, Context context) {
Log.i(TAG, "try connect to! " + ssid);
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest nr = new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).
removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED).
removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET
setNetworkSpecifier(ssid). //<--- here is the problem
build();
ConnectivityManager.NetworkCallback callback
= new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.i(TAG, "onAvailable " + network.toString() + " " + network.getClass().getName());
}
}
@Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.i(TAG, "onCapabilitiesChanged " + networkCapabilities.getLinkDownstreamBandwidthKbps());
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.i(TAG, "onLinkPropertiesChanged " + linkProperties.getInterfaceName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
Log.i(TAG, "requestNetwork ");
// cm.requestNetwork(nr, callback);
cm.registerNetworkCallback(nr, callback);
}
}