相关疑难解决方法(0)

检测Android上是否有可用的Internet连接

我需要检测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对象.但我不知道哪个.

  1. 如何让上面的代码段工作?
  2. 我怎么能找到自己在在线文档中需要的信息?
  3. 你能为这种类型的检测提出更好的方法吗?

android internet-connection android-internet

667
推荐指数
6
解决办法
52万
查看次数

以编程方式连接到无网络的wifi

我正在使用以下代码连接到没有互联网连接的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设备时从未看到过这样的通知.

android wifi android-wifi iot android-6.0-marshmallow

10
推荐指数
1
解决办法
5693
查看次数

以编程方式连接到WiFi后,几秒钟后断开连接

我遇到了代表用户切换wifi网络的问题.我们有一个IoT设备需要连接才能进行设置.使用WifiManagerConnectivityManager,我可以建立连接,甚至可以对它进行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)

android

6
推荐指数
2
解决办法
1980
查看次数

如何更新已创建的 Wi-Fi 配置(或“UID XXX 无权更新 [Wi-Fi] 配置错误”)?

我正在开发一个管理 Wi-Fi 连接的应用程序。我的场景是这样的:假设整个建筑物都有一个名为“testing-tls”的 Wi-Fi 网络。我的应用程序应该只能连接到选定的接入点(基于 BSSID 或 MAC ID)。我们使用TLS 身份验证机制来验证用户(自定义 CA 证书)。

我能够通过应用程序建立连接,但是当我尝试连接到不同的接入点(不同的 BSSID)时失败。即使我以编程方式创建了 Wi-Fi 配置,我也无法在第一次成功连接后更新配置。我已经在奥利奥和棉花糖中测试了我的应用程序。但是,我在奥利奥遇到了问题(不确定牛轧糖)。我开始怀疑是否有可能在创建后更新配置。

这些是我遵循的步骤:

1) 创建一个 WifiConfiguration 对象

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)

android wifi android-wifi tls1.2 android-8.0-oreo

5
推荐指数
1
解决办法
3704
查看次数