木曜日に適当に書いた実装
html に微妙な文字化けがあったみたいでそれを直したらなんとなく動いた。あ、Manifest に service な定義も忘れてたし、実機デバッグな記述も抜けてたな。
でも、動いたとは言えなんとなく動いてるだけ、ってカンジ。
微妙な点
- 時間経過とともに地図上を marker が移動しない
- 描画が異様に遅い
- GPS な通信ヤリまくるので電池消費が激しい
あと、サービス使って 5 * 1000 msec で Activity 側に通知を送ってるんですが、よく考えたらこれって Thread でナニしても問題ないのかな、と。とりあえず表示な 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"> var map; var marker; function setMarker(location) { marker = new google.maps.Marker({ position: location, map: map }); marker.setMap(map); } function initialize() { var latlng = new google.maps.LatLng(roid.getLat(), roid.getLng()); var myOptions = { zoom: 17, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); setMarker(latlng); } function reloadFunction() { marker.setMap(null); var latlng = new google.maps.LatLng(roid.getLat(), roid.getLng()); map.setCenter(latlng); setMarker(latlng); } </script> </head> <body onload="initialize()"> <div id="map_canvas" style="width:100%; height:100%"></div> </body> </html>
上記 html てきには setCenter でなんとかなるって思ったんですが、それ以前に roid なオブジェクトに今居る位置情報を渡してないので、いつまで経っても同じ位置を指している体たらく。
5 秒に一回通知がはいる BroadcastReceiver なソレが以下。
private class TimeCounterReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { webView.loadUrl("javascript:reloadFunction()"); } }
これでは位置は変わらんわな。上記 onReceive で現在位置を取得してその位置情報を roid なオブジェクトに送付する必要あり。このあたりがきちんと動いてる証拠が欲しいな。
しかも
onDestroy なメソドを略してるので、いつまで経ってもアプリが終わりませんorz
@Override public void onDestroy() { super.onDestroy(); unbindService(serviceConnection); unregisterReceiver(receiver); kitchenTimerService.stopSelf(); }
上記は KithenTimerService の例。がしかし正常終了しない。
とりあえず
サービスで一定時間を測って云々、ってのはなんとなく微妙、てかスレッド使って云々してるのであれば、Activity 側で Thread を kick して Handler 使えばなんとかなるように思えるんですが、そのあたりは明日ってコトで。
# と思ったら明日も夜にならないとそのあたりの時間が確保できない件orz