Android
 Computer >> コンピューター >  >> プログラミング >> Android

AndroidのWebViewで現在地(位置情報)を取得する方法を徹底解説

この記事では、AndroidアプリのWebView内でWebページの位置情報APIを使い、現在地を取得する方法をステップごとに解説します。WebViewでジオロケーションを有効化するポイントは、JavaScriptの許可とsetGeolocationEnabled(true)の設定、そしてマニフェストへの権限追加です。

全体の流れ

実装は以下の4ステップで完了します。

  1. Android Studioで新規プロジェクトを作成する
  2. レイアウトファイル(activity_main.xml)にWebViewを配置する
  3. MainActivity.javaでWebViewの設定を行う
  4. AndroidManifest.xmlにインターネット権限を追加する

Step 1:新規プロジェクトを作成する

Android Studioを起動し、メニューから「File」→「New Project」を選択して、必要な項目を入力して新しいプロジェクトを作成します。

Step 2:レイアウトにWebViewを配置する

res/layout/activity_main.xml に以下のコードを追加します。

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
   xmlns:app = "https://schemas.android.com/apk/res-auto"
   xmlns:tools = "https://schemas.android.com/tools"
   android:layout_width = "match_parent"
   android:gravity = "center"
   android:layout_height = "match_parent"
   tools:context = ".MainActivity"
   android:orientation = "vertical">
   <WebView
      android:id = "@+id/web_view"
      android:layout_width = "match_parent"
      android:layout_height = "match_parent" />
</LinearLayout>

上記のコードでは、位置情報確認サイト「mylocation.org」を表示するためのWebViewを画面いっぱいに配置しています。

Step 3:MainActivity.javaに処理を実装する

src/MainActivity.java に以下のコードを追加します。

package com.example.myapplication;
import android.app.ProgressDialog;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
    @RequiresApi(api = Build.VERSION_CODES.P)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Loading Data...");
        progressDialog.setCancelable(false);
        WebView web_view = findViewById(R.id.web_view);
        web_view.requestFocus();
        web_view.getSettings().setLightTouchEnabled(true);
        web_view.getSettings().setJavaScriptEnabled(true);
        web_view.getSettings().setGeolocationEnabled(true);
        web_view.loadUrl("https://mylocation.org/");
        web_view.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                if (progress < 100) {
                    progressDialog.show();
                }
                if (progress == 100) {
                    progressDialog.dismiss();
                }
            }
        });
   }
}

ここでの重要なポイントは以下の3つです。

  • setJavaScriptEnabled(true):位置情報APIはJavaScript経由で動作するため、JavaScriptを有効にします。
  • setGeolocationEnabled(true):WebView内でジオロケーション機能を有効化します。
  • onProgressChanged():ページ読み込み中はプログレスダイアログを表示し、読み込みが100%完了すると自動的に閉じます。

Step 4:AndroidManifest.xmlに権限を追加する

AndroidManifest.xml に以下のコードを追加します。インターネット通信のための権限宣言が必須です。

<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "https://schemas.android.com/apk/res/android"
    package = "com.example.myapplication">
    <uses-permission android:name = "android.permission.INTERNET"/>
    <application
       android:allowBackup = "true"
       android:icon = "@mipmap/ic_launcher"
       android:label = "@string/app_name"
       android:roundIcon = "@mipmap/ic_launcher_round"
       android:supportsRtl = "true"
       android:theme = "@style/AppTheme">
       <activity android:name = ".MainActivity">
          <intent-filter>
             <action android:name = "android.intent.action.MAIN" />
             <category android:name = "android.intent.category.LAUNCHER" />
          </intent-filter>
       </activity>
   </application>
</manifest>

アプリを実行して動作を確認する

それではアプリを実行してみましょう。実機のAndroidスマートフォンをパソコンに接続していることを前提に説明します。Android Studioからプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。デバイス選択画面で接続したスマートフォンを選択すると、端末側にアプリの初期画面が表示されます。

AndroidのWebViewで現在地(位置情報)を取得する方法を徹底解説

mylocation.orgのページ上で位置情報の取得を許可すると、現在の緯度・経度や住所などの位置情報がWebView内に表示されます。うまく動作しない場合は、端末の位置情報サービスがオンになっているか、アプリに位置情報権限が付与されているかもあわせて確認してみてください。

  1. Androidで現在のGPS位置情報をプログラムから取得する方法【サンプルコード付き】

    この記事では、Androidアプリでプログラムから現在のGPS位置情報を取得する方法を、サンプルコードとともにステップごとに解説します。 仕組みの概要 位置情報の取得には、Google Play Servicesが提供するFusedLocationProviderClientを使用します。このAPIはGPS・Wi-Fi・携帯基地局など複数の情報源を統合し、高精度かつバッテリー消費を抑えた位置情報を提供してくれます。 また、位置情報はユーザーのプライバシーに関わるデータであるため、ACCESS_FINE_LOCATIONパーミッションを実行時にリクエストする処理も必須となります。 ステップ1:新

  2. 【Android】現在地の緯度・経度を取得する方法をサンプルコード付きで解説

    この記事では、Androidアプリで現在地の緯度(latitude)と経度(longitude)を取得する方法を、実際に動作するサンプルコードとともにわかりやすく解説します。位置情報の取得には LocationManager クラスを使用します。GPSがオフの場合に設定画面へ誘導するダイアログの表示や、実行時パーミッションのリクエスト処理もあわせて実装していきます。ステップ1:Android Studioで新規プロジェクトを作成するAndroid Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目を入力して、新しいプロジェクトを作成してください。