2012年02月23日 (木)
■[android]位置情報取得(続報2)
先日入れ替えた 「framework-res.apk」ですが、オリジナル版との違いは何だろうかと差分とってみました。
すると、このような違い*1がありました。
\res\values\strings.xml の 31,32行目
オリジナル
<string name="config_networkLocationProvider">@null</string> <string name="config_geocodeProvider">@null</string>
修正版
<string name="config_networkLocationProvider">com.google.android.location.NetworkLocationProvider</string> <string name="config_geocodeProvider">com.google.android.location.GeocodeProvider</string>
なるほどといった感じ。オリジナル版にはLocationProviderとGeocodeProviderの値にnullが入っているのでこれだとどうやっても動かないような感じしますね。
この部分だけだったら、後で新ファームが出ても治せそうなので、apkmanagerでframework-res.apk展開→修正→作成をやってみたらaaptが落ちてapkが作成でできない。うーん。
2012年02月22日 (水)
■[Android]VX580でwifi位置情報がNGの件(続報)
http://bthehb.wordpress.com/2012/02/19/allwinner-essential-v0-8pre/
↑に含まれる、framework-res.apk を 入れ替えて再起動してddmsデバッガで見たところ
次のように今まで出てこなかったログが出てきたので
D/NetworkLocationService(314): onCreate D/NetworkLocationService(314): onBind com.google.android.location.NetworkLocationProvider D/NetworkLocationService(314): onBind com.google.android.location.GeocodeProvider E/NetworkLocationProvider(314): releaseCheckLocationLock: wake lock has already been released
NetworkLocationProviderがまともに動くようになったポイ。(他製品のframework-resなのでまだ不具合が出る可能性もありますが...)
追記:
その後、wifiの位置情報を取得するアプリを試したところ無事に動作し位置取得も正常動作しました!
が、不具合としてGoogleのアカウント情報がリセットされてしまいました。他にも設定画面などで問題が発生するかもしれません。
framework-resのどの辺をいじれば位置情報を有効にできるんだろうか?どこかわかればVX580Wのframework-resから自前で治せそうなんだけどなぁ...?
追記2:
wifi位置情報が取得できない件をまとめると、
- NetworkLocation.apk の最新版を入れる
- framework-res.apk を上記のURLでDLできるファイルから抜き取って/system/frameworkにアップして再起動する
とOK。場合によってはユーザデータの初期化も必要。
追記3:
移動中には位置情報が更新されない模様です。再起動すると位置情報は更新されますが、期待した動作ではないですね。GoogleMapでは更新されて居るのでGoogleMapの位置情報とアプリの位置情報取得処理は別々に独立しているようです。
2012年01月31日 (火)
■[android]VX580 ICS ネットワーク(wifi)位置情報が取得できない件【GoogleMapのみ解決】
onda VX580WPをICSにしてからwifiの位置情報が全く取得できない件で悩んでいてシステムアプリの「NetworkLocation.apk」いろいろ入れ替えたりしていたら偶然位置情報が取れたときがありました。
ただ、そのまま再起動したら元の位置情報が取れない状態に戻ってしまいました。どうも、GPSがあるかないかの判定が悪さしている気がするんですが
この機種は元々GPSなんてないのにあるような設定がしてあってそのあたりなのかなと思いましたが、「GPS無効」にしてみてもやっぱりダメ。
なんなんだろう
試したこと
NetworkLocation.apkはondaのICSファームには入っていないのでネット上を探して入手したバージョンを入れてみた。
- NetworkLocation.apk バージョン1.? (android 2.3.3)→△(偶然動いた?)
- NetworkLocation.apk バージョン1.1.x (android 4.0.1)→NG
- NetworkLocation.apk バージョン1.1.08 (android 4.0.3)→○(後日動作確認しました)
偶然位置情報が取れて動いたのは、GoogleMapのみで他のアプリケーションは取れないままでした。
追記:
NetworkLocation.apkをもっと古いバージョン1.0.0(android 2.3.x? Froyo?の頃)に置きかえたら動くようになったようです。ただし、GoogleMapとGoogleSkyMapだけで他のGenieWidgetやMapionなどのアプリはやっぱりNGでした。
また、原因がよくわからないのですが、なぜか新潟県ではエリア外で動作しないはずのradikoが動いてラジオが聴けました。android2.3の頃は選局画面すら出なかったのになんでだろう?エリア的にはFM東京やJ-WAVEが聴けるので関東になっているみたいです。単純にradikoのバージョンが上がって聞けるようになったのかもしれません。
ま、新潟県のFMPortもradiko対応したら完璧なんだけど。
ネットはイーモバイル接続ですが現在値は正確に出てますね...。他のアプリは結局の所GPSの位置情報しか取得しないんですかね。
追記2(2012/2/6):
よく確認したら、GoogleSkyMapはwifi位置情報取得NGでした。radikoが聞けたのは擬似的な位置情報が入っていたから奇跡的に聞けただけだったようで、今では何度やってもエリア外というエラーになってしまい二度と聞けない状態です。
その後は、他のwifi位置情報を取得するアプリをいろいろと試して居るんですが全く取得できていません。いったいなんでなんだ??
ここからは私の推測ですが、なぜGoogleMapだけがwifi位置情報取得に成功するか?
デバッガーで見る限り、「com.google.android.apps.maps:NetworkLocationService」というGoogleMap専用の「LocationService」なんてのが起動していて他のアプリとは違う方法で取得しているような感じがします。ただ、「NetworkLocation.apk」が無いとこのプロセスも起動しないのでなんらかの関係を持っているのは間違いないと思います。
他のアプリはandroidがICSになったことで「NetworkLocation.apk」をうまく呼び出せないんでしょうか...?位置を取得した瞬間に落ちるアプリをデバッガーで見る限り、こんなエラーが出ているので
java.lang.IllegalArgumentException: provider=network
「LocationProvider=network」 でnetworkから位置を取得する所まで行っているのに引数が正しくないとかで落ちているようです。せめて落ちないようなコーディングして欲しいものですが..
追記3:
radikoはイーモバイル接続だと聴けて家のフレッツ光だと聴けなかったので、プロバイダのIPでロケーション判定してるような感じがします。どうもイーモバイル接続してるとradikoではロケーションが東京?になる感じですね。
というわけで、今のところICSで位置情報がまともに動作するのはGoogleMapとradikoだけかな?
追記4:
後日、VX580の403ファームにアップした後にNetworkLocation.apkをインストールしても位置情報が取れなくなってハマッタのですが.........。設定の初期化もしくは、設定からタブレット端末のリセットをすると位置情報が取れるようになりました。(アプリなどの設定データが消えるのでバックアップ等行ってからした方が良いです)

ユーザデータの初期化をしただけなのですが、、、
YARDARMさんは他のアプリも位置取得できていますか?
実害はないのですけど、なんだかなぁって感じです。