在Android Wear上保持wifi连接

时间:2017-08-10 17:42:07

标签: android wifi wear-os communication wifimanager

问题: 我有一个带有Android Wear 2.0的华为手表。我的应用程序应该通过WiFi发送数据,但手表会非常快速地与Wifi断开连接。如何将手表与Wifi连接?

清单:

<uses-feature android:name="android.hardware.wifi" />

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

在活动中:

public static void keepWiFiOn(Context context, boolean on) {
    if (wifiLock == null) {
        WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        if (wm != null) {
            wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL, TAG);
            wifiLock.setReferenceCounted(true);
        }
    }
    if (wifiLock != null) { // May be null if wm is null
        if (on) {
            wifiLock.acquire();
            Log.d(TAG, "Acquired WiFi lock");
        } else if (wifiLock.isHeld()) {
            wifiLock.release();
            Log.d(TAG, "Released WiFi lock");
        }
    }
}

获取了WiFi锁定,但不会在另一侧收到数据发送。

3 个答案:

答案 0 :(得分:0)

可以防止这样的电池节省&#39;设备首选项中的行为。 在这种情况下,您可以在首选项中启用此模式,并禁用可穿戴设备和手持设备之间的连接(例如,禁用蓝牙)。

使用您的代码无法做到这一点。

答案 1 :(得分:0)

尝试断开与手机的蓝牙连接。

我发现如果连接(HuaweiWatch2&lt; - &gt; iPhone),手表将使用手机连接。它将忽略任何锁定和重新连接尝试。

答案 2 :(得分:0)

您应该通过ConnectivityManager.requestNetwork要求打开wifi

示例代码:

ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
NetworkRequest request = new NetworkRequest.Builder()
   .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
   .build();
networkCallback = new NetworkCallback();
cm.requestNetwork(request, networkCallback);