携帯サイト制作道場
auのAndroidスマートフォン「IS01」で位置情報を取得できない条件とは
技術チーム 野崎
2010/8/10
更新:2010/9/15
携帯サイト制作道場では、私たちの製品やサービスで培ったノウハウの中から、携帯サイト制作に役立つ情報をお伝えしていきたいと思います。
各キャリアから発売され出揃ったAndroid搭載のスマートフォンのGPS機能を調査していました。
調査のなかで、WEBコンテンツを作成し位置表示をさせていたところ、auから発売された「IS01」で、なぜか位置表示ができませんでした。
そこで、原因を調べた過程と、その結果を書かせていただきます。
まず、Android端末からGPSを利用して位置情報を取得するコンテンツをつくりました。
Android2.1搭載のスマートフォンであるDesireはGeolocation API(Geolocation API Specification−W3C)が利用できます。
しかし、Android1.6搭載スマートフォンであるHT-03A、Xperia、IS01はGeolocationAPIに非対応なためブラウザの拡張機能であるGoogle Gears(Geolocation API−Gears API−Google Code)を利用して位置情報を取得します。
取得方法がAndroidのバージョンによって異なるため、JavaScriptで場合分けが必要です。
ちなみにiPhoneもGeolocation APIが使用できるので、Android2.1スマートフォンと同様に位置の取得ができます。
コンテンツは下記のようになります。
【位置情報を取得するためのコンテンツ】
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=Shift-jis"/>
<script type="text/javascript" src="gears_init.js"></script>
<script type="text/javascript">
<!--
//緯度経度取得
function getGPS(){
var gps;
//Androidバージョンの判定
var agent = navigator.userAgent;
if( agent.search(/Android 1.5;/) != -1 || agent.search(/Android 1.6;/) != -1){
gps = google.gears.factory.create('beta.geolocation');
}else{
gps = navigator.geolocation;
}
gps.getCurrentPosition(updatePosition, handleError);
return false;
}
//緯度経度の表示
function updatePosition(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
alert('lat=' + lat + ' lon=' + lon);
}
//エラー処理
function handleError(positionError) {
alert('Attempt to get location failed: ' + positionError.message);
}
//-->
</script>
<body>
<a href="#" onclick="return getGPS()">位置情報</a>
</body>
</html>
|
上記のコンテンツをお試しの方は、htmlファイルがあるフォルダにgears_init.jsを置くことをお忘れなく。
端末がデフォルトのままだと位置情報は取得できないので設定をしましょう。
@GPSの設定
メインメニュー > 設定 > セキュリティ&位置情報 を開き、
「ワイヤレスネットワークを使用」、「GPS機能をONにする」、「Googleと共有する」にチェックを入れます。

Aブラウザの設定
-
Android1.6の場合(HT-03A、Xperia、IS01)
ブラウザ画面 > メニュー > (その他) > 設定 を開き、
「Gearsを有効にする」にチェックを入れます。
-
Android2.1の場合(Desire)
ブラウザ画面 > メニュー > その他 > 設定 を開き、
「位置情報をを有効にする」にチェックを入れます。
標準ブラウザからコンテンツにアクセスし、表示された「位置情報」のリンクをタッチすると・・・。
| HT-03A | Xperia | Desire |
![]() |
![]() |
![]() |
| iPhone | IS01 |
![]() |
![]() |
位置情報が表示されました。
・・・あれ?IS01はエラーが出てます。
| Attempt to get location failed:Network provider at http://www.google.com/loc/json did not provide a good position fix |
故障か、コンテンツが間違っているのか、もしくはブラウザに機種依存があるのでしょうか?
切り分けしてみました。
まずデフォルト搭載アプリの「マップ」と「方位計」を試すとちゃんと位置情報が取得できています。
→故障ではない。
次にgoogleのWEBサイト(http://google.co.jp)で位置情報が取れるかを確認してみます。
Wi-Fi接続では現在地が表示されるが、3G回線だとやはり位置取得に失敗してしまいます。
→コンテンツのせいではない?
- ・表示モード「モバイル」を選択します。
- ・Googleのサイト > 設定 「位置情報の通知を許可しますか?」で「はい」を選択し、「保存」ボタンをクリックします。
となると、IS01はマルチタッチに対応したり独自APIが用意されていたりするので、ブラウザにも何らかの手が入っているのかもしれません。
→もしかして拡張設定があるのか?
試しにauショップで聞いてみたところ、設定は合っているとのこと。…困りました。
どうしたものかと悩んでいたら、ちょうど『SHARP Androidアプリ開発 テクニカルセッション』というセミナーがあり、飛びついて参加しました。
セミナーにはまさにIS01を開発した方々が来場しており、コンテンツから位置情報が取得できない旨を質問してみたところ、下記のような回答を頂きました。
(とても親切に対応してくださいました。ありがとうございました!)
|
つまりauの通信方式はCDMA2000であるため、AndroidのCdmaCellLocationクラスが対応しておらずIS01は位置取得でエラーとなっているとわけです。
確かにWi-Fi接続にしたら位置情報が表示されました。
以上の情報を整理すると、位置情報を取得できないのは下記の条件の時ということです。
【Android端末が位置情報を取得できない条件】|
Android端末
├ アプリ⇒OK
└ 標準ブラウザ
├ Android2.1(geolocation利用)⇒OK
└ Android1.6(Gears利用)
├ WCDMA接続⇒OK
├ Wi-Fi接続⇒OK
└ CDMA2000接続⇒NG
|
コンテンツを作成する方や、ブラウザアプリなどを作る方は注意が必要です。
[更新情報] 2010/09/15
位置情報を取得した際、エラーが表示されず、誤った位置情報が取得される場合もあるようです。
表示されてしまいました。
この現象はGoogle以外のサイトでも確認できましたが、発生原因については、本体のアップデートによるものか、ネットワーク側の何らかの変更によるものなのか、現時点では不明です。
また、この例では位置情報を取得した場所(新宿)と全く違う場所(兵庫県)が表示された為、間違いであることに気づけましたが、程良く近隣の情報が取得されることもあり、間違いに気づかない可能性もあるので注意が必要です。
[注意事項]
これらの情報は独自調査のものです。
実際の利用に関しましては、各キャリアの公式資料も併せてご参照の上、ご自身の判断によりご利用ください。




















