我需要检测Android设备是否已连接到Internet.
本NetworkInfo类提供了一个非静态方法isAvailable()听起来很完美.
问题是:
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
抛出此错误:
The constructor NetworkInfo is not visible.
Run Code Online (Sandbox Code Playgroud)
安全的赌注是有另一个类返回一个NetworkInfo对象.但我不知道哪个.
我正在使用以下代码连接到没有互联网连接的WiFi网络,因为它拥有自己的网络服务器,我想连接即使没有可用的互联网连接.
WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifiConfiguration.SSID = String.format("\"%s\"", scanResult.SSID);
wifiConfiguration.preSharedKey = String.format("\"%s\"", "secret");
int netId = wifiManager.addNetwork(wifiConfiguration)
wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();
Run Code Online (Sandbox Code Playgroud)
这适用于Android Marshmallow下面的每个设备(我使用CM13,所以它可能与CyanogenMod有关?):当我使用此代码进行连接时,Android仍然使用移动连接并用感叹号标记WiFi符号.几秒后它会显示一个通知,询问我是否要保持连接,因为网络没有互联网连接.
问题:我的应用尝试自动连接到我的网络服务器失败,因为显然没有互联网连接.当然可以等到我能够访问我的网络服务器,但它应该在没有用户交互的情况下工作.
ChromeCast 或任何其他物联网设备如何解决这个问题?我在设置ChromeCast设备时从未看到过这样的通知.
我遇到了代表用户切换wifi网络的问题.我们有一个IoT设备需要连接才能进行设置.使用WifiManager和ConnectivityManager,我可以建立连接,甚至可以对它进行REST调用,但它会在大约10秒后恢复.我不明白为什么.设备中有一些奇怪的日志行我确定是相关的,但我不知道如何修复,主要是:
02-12 15:36:13.441 E/WifiConfigManager: UID 10356 does not have permission to update configuration "REDACTED"NONE
02-12 15:36:13.442 I/WifiStateMachine: connectToUserSelectNetwork Allowing uid 10356 with insufficient permissions to connect=90
...
02-12 15:36:13.470 E/WifiVendorHal: stopRssiMonitoring(l.2156) failed {.code = ERROR_NOT_AVAILABLE, .description = }
02-12 15:36:13.470 W/WifiConfigManager: Looking up network with invalid networkId -1
...
02-12 15:36:16.882 D/WifiStateMachine: NETWORK_STATUS_UNWANTED_VALIDATION_FAILED
...
02-12 15:36:17.041 D/WifiPermissionsUtil: Denied: no location permission
Run Code Online (Sandbox Code Playgroud)
那里有很多关于权限的内容,但我想我要求所有权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" …Run Code Online (Sandbox Code Playgroud) 我正在开发一个管理 Wi-Fi 连接的应用程序。我的场景是这样的:假设整个建筑物都有一个名为“testing-tls”的 Wi-Fi 网络。我的应用程序应该只能连接到选定的接入点(基于 BSSID 或 MAC ID)。我们使用TLS 身份验证机制来验证用户(自定义 CA 证书)。
我能够通过应用程序建立连接,但是当我尝试连接到不同的接入点(不同的 BSSID)时失败。即使我以编程方式创建了 Wi-Fi 配置,我也无法在第一次成功连接后更新配置。我已经在奥利奥和棉花糖中测试了我的应用程序。但是,我在奥利奥遇到了问题(不确定牛轧糖)。我开始怀疑是否有可能在创建后更新配置。
private WifiConfiguration createWifiConfiguration() {
WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"testing-tls\"";
config.priority = 1;
config.status = WifiConfiguration.Status.ENABLED;
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP;
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);
config.enterpriseConfig.setIdentity(identityName);
config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS);
PKCS12ParseInfo parseInfo;
try {
parseInfo = CertificateUtils.parsePKCS12Certificate(
certificateFilePath, identityPassword);
if (parseInfo != null) {
config.enterpriseConfig.setClientKeyEntry(parseInfo.getPrivateKey(),
parseInfo.getCertificate());
return config;
}
return null;
} catch (KeyStoreException | NoSuchAlgorithmException | IOException |
CertificateException | UnrecoverableKeyException | KeyManagementException e1) …Run Code Online (Sandbox Code Playgroud)