OSDN Git Service

Wifiの接続についてちょっと改善。
authorMRSa <mrsa@myad.jp>
Thu, 21 Jan 2021 14:18:13 +0000 (23:18 +0900)
committerMRSa <mrsa@myad.jp>
Thu, 21 Jan 2021 14:18:13 +0000 (23:18 +0900)
wear/src/main/java/jp/sfjp/gokigen/a01c/MainActivity.java
wear/src/main/java/jp/sfjp/gokigen/a01c/WifiConnection.kt
wear/src/main/res/values-ja/strings.xml
wear/src/main/res/values/strings.xml

index 7873ba5..d719f01 100644 (file)
@@ -116,6 +116,7 @@ public class MainActivity extends AppCompatActivity implements  IChangeScene, IS
             setupActionListener();
 
             wifiConnection = new WifiConnection(this, this);
+            wifiConnection.requestNetwork();
         }
         catch (Exception e)
         {
index 9103772..75dd72a 100644 (file)
@@ -61,7 +61,7 @@ class WifiConnection(private val context: AppCompatActivity, private val callbac
 
         override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities)
         {
-            context.runOnUiThread { Log.d(TAG, "Network capabilities changed") }
+            Log.d(TAG, "Network capabilities changed")
         }
 
         override fun onLost(network: Network)
@@ -182,7 +182,6 @@ class WifiConnection(private val context: AppCompatActivity, private val callbac
      * Wifi接続状態の監視
      * (接続の実処理は onReceiveBroadcastOfConnection() で実施)
      */
-    @Suppress("DEPRECATION")
     fun startWatchWifiStatus()
     {
         Log.v(TAG, "startWatchWifiStatus()")
@@ -215,23 +214,49 @@ class WifiConnection(private val context: AppCompatActivity, private val callbac
 
     private fun requestHighBandwidthNetwork()
     {
-        // Before requesting a high-bandwidth network, ensure prior requests are invalidated.
-        unregisterNetworkCallback()
-        Log.d(TAG, "requestHighBandwidthNetwork(): Requesting high-bandwidth network")
-
-        // Requesting an unmetered network may prevent you from connecting to the cellular
-        // network on the user's watch or phone; however, unless you explicitly ask for permission
-        // to a access the user's cellular network, you should request an unmetered network.
-        val request = NetworkRequest.Builder()
-            .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
-            .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
-            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
-            .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
-            .build()
-
-        // requires android.permission.CHANGE_NETWORK_STATE
-        connectivityManager.requestNetwork(request, networkCallback)
-        networkConnectionTimeoutHandler.sendMessageDelayed(networkConnectionTimeoutHandler.obtainMessage(MESSAGE_CONNECTIVITY_TIMEOUT), NETWORK_CONNECTIVITY_TIMEOUT_MS)
+        try
+        {
+            val bandwidth: Int = connectivityManager.activeNetwork?.let { activeNetwork ->
+                connectivityManager.getNetworkCapabilities(activeNetwork)?.linkDownstreamBandwidthKbps
+            } ?: -1
+            Log.v(TAG, " requestHighBandwidthNetwork() (Bandwidth: $bandwidth)")
+            when
+            {
+                bandwidth < 0 -> {
+                    // No active network
+                }
+                bandwidth in (0 until MIN_NETWORK_BANDWIDTH_KBPS) -> {
+                    // Request a high-bandwidth network
+                }
+                else -> {
+                    // すでにつながっているので、何もしない。
+                    Log.d(TAG, " already connected with high-bandwidth network")
+                    return
+                }
+            }
+
+            // Before requesting a high-bandwidth network, ensure prior requests are invalidated.
+            unregisterNetworkCallback()
+            Log.d(TAG, "requestHighBandwidthNetwork(): Requesting high-bandwidth network")
+
+            // Requesting an unmetered network may prevent you from connecting to the cellular
+            // network on the user's watch or phone; however, unless you explicitly ask for permission
+            // to a access the user's cellular network, you should request an unmetered network.
+            val request = NetworkRequest.Builder()
+                    .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
+                    .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+                    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+                    .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
+                    .build()
+
+            // requires android.permission.CHANGE_NETWORK_STATE
+            connectivityManager.requestNetwork(request, networkCallback)
+            networkConnectionTimeoutHandler.sendMessageDelayed(networkConnectionTimeoutHandler.obtainMessage(MESSAGE_CONNECTIVITY_TIMEOUT), NETWORK_CONNECTIVITY_TIMEOUT_MS)
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
     }
 
     companion object
index 1d08c9c..3c4382d 100644 (file)
@@ -42,7 +42,7 @@
     <string name="shoot_camera">撮影!</string>
     <string name="shoot_camera_failure">失敗です&#8230;</string>
     <string name="video_recording">&#9679;REC</string>
-    <string name="capturing">CAPTURE</string>
+    <string name="capturing">INTERVAL</string>
     <string name="video_failure">失敗です&#8230;</string>
     <string name="message_none">---</string>
 
index d87def3..64fe46f 100644 (file)
@@ -41,7 +41,7 @@
     <string name="shoot_camera">Capture!</string>
     <string name="shoot_camera_failure">FAILED!</string>
     <string name="video_recording">&#9679;REC</string>
-    <string name="capturing">CAPTURE</string>
+    <string name="capturing">INTERVAL</string>
     <string name="video_failure">FAILED!</string>
     <string name="message_none">---</string>