AndroidのWebView内でgeolocationを使う

こんにちわ、araishiです。昨日のWBCの日本vs台湾はなかなか熱かったですねー。野球は普段まったく見ないんですが、日本代表戦だと見ちゃいます。なんでなんでしょうね。

さて、今日はAndroidのWebViewでHTML5のgeolocationをJavaScriptで使った時、GPS情報が取得できなかったので調べてみました。

GoogleMapと現在地を表示するページをHTML5とJavaScript作って、手元のAndroidのブラウザ(Chrome)で該当ページを開くとGPSで現在地を利用できるのに、WebViewでアプリにして表示するとGPSで現在地が使えない・・・。

JavaScriptでいうところのこの部分。


じゃぁもうわざわざアプリなんかにせずAndroidでChrome使っとけばいいじゃん!と言われそうでしたが、Chromeだって同じWebViewだろうと思ったので、あきらめず調べると…..できました!

WebChromeClientを指定してonGeolocationPermissionsShowPromptのオーバーライドをすることで使えるようになりました。webページからgeolocationを通してGPSを使うにはセキュリティ向上のためユーザーに確認をとるそうです。ということでJavaファイルはこのようになりました。

public class MainActivity extends Activity {

  private WebView webView;
  private static final String webUrl = "http://......com/../../";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      webView = new WebView(this);

      // JSを有効に
      webView.getSettings().setJavaScriptEnabled(true);

      // GPSを有効に
      webView.getSettings().setGeolocationEnabled(true);
      webView.setWebChromeClient(new WebChromeClient(){
          @Override
          // onGeolocationPermissionsShowPromptのオーバーライド
          public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) {
            callback.invoke(origin, true, false);
          }
      });
      webView.loadUrl(webUrl);
      setContentView(webView);
  }
}

AndroidマニフェストファイルのpermissionはGPSとインターネットを使うように。




アプリが実行された時のAndroid端末の位置情報通知設定の有無を見て、無効になってればダイアログを出して、位置情報設定画面に移動したいところですが、それはまた別のお話しです。

・参考
WebView 上の HTML5 で geolocation を利用する設定

カテゴリー: Android, javascript

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*