2010年12月15日水曜日

androidのwebviewでHTML5のGeolocationを使う方法 #追記2011/01/14 上手くいってない? #さらに追記2010/01/18

色々調べた結果

以下のパーミッションをマニフェストに追加

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

WebChromeClientを適当に作る。なんかほかにも色々出来そうだけど。とりあえずgeolocationのみで
final class GeoClient extends WebChromeClient {

@Override
public void onGeolocationPermissionsShowPrompt(String origin,
Callback callback) {
// TODO Auto-generated method stub
super.onGeolocationPermissionsShowPrompt(origin, callback);
callback.invoke(origin, true, false);
}
}


でWebViewの準備時に以下のような感じにする


this.webview = new WebView(this);
this.webview.getSettings().setJavaScriptEnabled(true);
GeoClient geo = new GeoClient();
this.webview.setWebChromeClient(geo);



なんか
getSettings().setGeolocationEnabled(true)とかを叩いても行けるっぽいようなことも書いてあったりしたけど、うまくいかなかったので上記で対応した。

#追記
何故か環境依存で上手くいかない場合があるみたい?細かいことは不明だが2.0から2.1にAPIバージョン上げて2.2でテストとか言う変則パターンだと上手く動作しなかった。
細かいこと調べてあとで書きなおす。
なのであんまり参考にしないでね。
##追記の追記
どうやら上手く動いてるようです。
上の追記でおかしくなった理由は試していたgeolocation使ったjsのミスによるものでした。

0 件のコメント:

コメントを投稿