NexusOneのネットワーク接続判定を改良してみる

投稿者: | 2011年4月11日

うちのAndroid端末にはMiFiのSimがささっていますが、日経電子版のようにConnectivityServiceからisAvailableの値を取得して
現在ネットワーク接続可能かどうかを判断しているアプリの場合には通信してくれないという問題があります。
そのため、frameworkをいじってこの部分を無理矢理偽装改良した記録です。

注意

自分でビルドできないと使えないのでわかる人しか使わないでしょうけど、当然動作については無保証です。
ネットワーク状態判定部分なので他のいろいろな機能に影響がある可能性もあります。

ベースはCyanogenModのgingerbreadブランチを使ってますが、
このあたりはそれほどAOSP版のベースからいじってないと思うのでたぶんAOSP版でも大丈夫じゃないかと(試してません)。
 

変更箇所

以下の部分を通信接続状態を見て判定するように変更します。
ConnectivityServiceからisAvailableを取得しに行った時に、
isConnected が”true”の場合にも isAvailableも “true”を返すように変更。

frameworks/base/core/java/android/net/NetworkInfo.java

@@ -225,6 +225,9 @@
      * @return {@code true} if the network is available, {@code false} otherwise
      */
     public boolean isAvailable() {
+        if(isConnected()){
+            mIsAvailable = true;
+        }
         return mIsAvailable;
     }

以上の追加のみで、日経電子版はMVNOのsimでも問題なくデータDLしてくれるようになりました。
また、ブラウザの最初に”データ接続できない”って言われるのもなくなりました。

ちなみに isAvailable の戻り値を常に”true”で固定するとsimがささっていなくても
電波状態を取得しに行くようになったので電池を食うものと思われます。

NexusOneのネットワーク接続判定を改良してみる」への1件のフィードバック

  1. ピンバック: Androidのセルスタンバイ問題をソース側で修正してみる - 記録

コメントを残す

メールアドレスが公開されることはありません。