動かん
とりあえず
- javascript と Android のやりとりが駄目なのか
- GPS なデータ取得が駄目なのか
不明なので切り分けるためにどっちかだけのサンプルを作ってみる事に。
まず
javascript と Android のソレから。Android 側からは double な数値リテラルを戻すだけの実装。
package jp.shuri.yamanetoshi.javascript_sample; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.webkit.WebView; public class javascript_sample extends Activity { class JsObj { private Context con; public JsObj(Context con) { this.con = con; } public double getLat() { return 26.19; } public double getLng() { return 127.67; } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView webView = new WebView(this); JsObj jo = new JsObj(this); webView.addJavascriptInterface(jo, "roid"); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("file:///android_asset/index.html"); setContentView(webView); } }
assets/index.html が以下。
<html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> function initialize() { //var latlng = new google.maps.LatLng(26.19,127.67); var latlng = new google.maps.LatLng(roid.getLat(), roid.getLng()); var myOptions = { zoom: 8, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); } </script> </head> <body onload="initialize()"> <div id="map_canvas" style="width:100%; height:100%"></div> </body> </html>
正常動作を確認。てコトは GPS か。
GPS の動作
以下を参考にしつつ。
以下をでっち上げてみた。
package jp.shuri.yamanetoshi.gps_sample; import android.app.Activity; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.util.Log; public class gps_sample extends Activity implements LocationListener { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LocationManager lm = (LocationManager)getSystemService(LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0, this); Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); Log.i("gps_sample", "getLat() = " + location.getLatitude()); Log.i("gps_sample", "getLng() = " + location.getLatitude()); setContentView(R.layout.main); } public void onLocationChanged(Location location) { // TODO Auto-generated method stub } public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } }
ぬるぽでオチますな。getLatitude() してるトコです。これは初回問題ってヤツらしい。てかログが以下。
05-17 22:07:17 I 296 gps_sample getLat() = 37.422006 05-17 22:07:17 I 296 gps_sample getLng() = 37.422006
ええと、以下にしてリトライ。
Log.i("gps_sample", "getLat() = " + location.getLatitude()); Log.i("gps_sample", "getLng() = " + location.getLongitude());
出ました。
05-17 22:10:34 I 328 gps_sample getLat() = 37.422006 05-17 22:10:34 I 328 gps_sample getLng() = -122.084095
上記は DDMS な Emulator Control の Location Controls の値と同じッス。
試験の仕方
emulator で試験する場合、一度 emulator 起動しといて位置情報を send しておく必要がある模様。
あと、gps 関連については、実機で試験してみたい。
ちなみに
上記の実装ですが、Activity が LocationListener を実装してて
public void onLocationChanged(Location location) { // TODO Auto-generated method stub }
を使うと面白い事がありそげ。これはナビに使えますな。