AndroidアプリでGoogleマップに現在地を表示する方法を徹底解説
Androidアプリ開発において、Googleマップ上にユーザーの現在地を表示する機能は、ナビゲーションアプリやフードデリバリーアプリなど、多くの場面で活用されています。本記事では、Android Studioを使ってGoogleマップに現在地を表示する手順を、サンプルコード付きで段階的に解説します。
実装の全体像
今回の実装では、以下の要素を組み合わせて現在地を取得・表示します。
- SupportMapFragment: マップを画面に表示するためのフラグメント
- FusedLocationProviderClient: Google Play Servicesが提供する位置情報取得API。GPSやWi-Fiなどを統合的に利用し、高精度かつ省電力で現在地を取得できます
- 位置情報パーミッション: ACCESS_FINE_LOCATION権限のリクエスト処理
ステップ1:新規プロジェクトを作成する
Android Studioを起動し、「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目(プロジェクト名、パッケージ名、保存先など)を入力しましょう。テンプレートは「Empty Activity」で問題ありません。
ステップ2:レイアウトファイルを編集する
res/layout/activity_main.xml に以下のコードを追加します。ここでは、マップを全画面表示するための SupportMapFragment を配置しています。
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:id="@+id/myMap"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" />ステップ3:依存関係を追加する
build.gradle(Module: app)の dependencies ブロックに、以下の2つのライブラリを追加します。
implementation 'com.google.android.gms:play-services-maps:17.0.0' implementation 'com.google.android.gms:play-services-location:17.0.0'
「play-services-maps」はマップ表示用、「play-services-location」は現在地取得用のライブラリです。追加後は「Sync Now」をクリックして同期を忘れずに行いましょう。
ステップ4:MainActivityを実装する
src/MainActivity.java に以下のコードを記述します。このコードでは、位置情報の権限チェック、現在地の取得、マップへのマーカー表示までを一連の流れで処理しています。
import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.FragmentActivity;
public class MainActivity extends FragmentActivity implements OnMapReadyCallback {
Location currentLocation;
FusedLocationProviderClient fusedLocationProviderClient;
private static final int REQUEST_CODE = 101
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
fetchLocation();
}
private void fetchLocation() {
if (ActivityCompat.checkSelfPermission(
this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE);
return;
}
Task<Location> task = fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
currentLocation = location;
Toast.makeText(getApplicationContext(), currentLocation.getLatitude() + "" + currentLocation.getLongitude(), Toast.LENGTH_SHORT).show();
SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.myMap);
assert supportMapFragment != null;
supportMapFragment.getMapAsync(MainActivity.this);
}
}
});
}
@Override
public void onMapReady(GoogleMap googleMap) {
LatLng latLng = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
MarkerOptions markerOptions = new MarkerOptions().position(latLng).title("I am here!");
googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 5));
googleMap.addMarker(markerOptions);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
fetchLocation();
}
break;
}
}
}コードのポイント解説
- fetchLocation(): まずACCESS_FINE_LOCATION権限が許可されているかを確認し、未許可の場合はダイアログを表示してユーザーにリクエストします。
- getLastLocation(): 端末が最後に記録した位置情報を取得します。取得成功時にToastで緯度経度を確認できます。
- onMapReady(): マップの準備が整ったタイミングで呼ばれ、現在地にマーカーを設置し、カメラをアニメーションで移動させます。
ステップ5:strings.xmlにAPIキー用の定義を追加する
Open strings.xml を開き、以下のコードを追加します。
<resources>
<string name="app_name">Sample</string>
<string name="map_key" translatable="false">Enter your google API key here</string>
</resources>ステップ6:Google Maps APIキーを取得する
マップを表示するには、Google Cloud Platform(GCP)で発行されるAPIキーが必要です。以下の手順で取得してください。
- Google Cloud Platform Console にアクセスします。
- プロジェクトのプルダウンをクリックし、APIキーを追加したいプロジェクトを選択または新規作成します。
- メニューボタンから「APIとサービス」→「認証情報」を選択します。
- 認証情報ページで「認証情報を作成」→「APIキー」をクリックすると、新しく作成されたAPIキーがダイアログに表示されます。
- 「閉じる」をクリックします。
作成したAPIキーは、認証情報ページの「APIキー」欄に一覧表示されます。本番環境で使用する前に、必ずAPIキーに制限(アプリ制限・API制限)を設定しておきましょう。これにより、キーの不正利用を防ぐことができます。
ステップ7:AndroidManifest.xmlを編集する
androidManifest.xml に、インターネット通信と位置情報取得のためのパーミッション、およびAPIキーのmeta-data定義を追加します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<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">
<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/map_key"/>
<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端末をPCに接続し、Android Studioからアプリを実行してみましょう。プロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。接続済みのモバイル端末を選択すると、アプリが起動し、マップ上に現在地を示すマーカーが表示されます。

うまく動かないときのチェックポイント
- APIキーが正しく strings.xml に設定されているか確認する
- GCPコンソールで「Maps SDK for Android」が有効化されているか確認する
- 端末の位置情報サービス(GPS)がオンになっているか確認する
- エミュレータではなく実機でテストすることを推奨(エミュレータの場合は位置情報のシミュレート設定が必要)
これらを確認すれば、ほとんどの問題は解決できるはずです。ぜひ本記事の手順を参考に、現在地表示機能をあなたのアプリに組み込んでみてください。
-
AndroidのLocation APIで現在地を追跡・表示する方法をステップごとに解説
概要この記事では、AndroidのLocation API(Google Maps SDK)を使って、現在地を取得し地図上に表示する方法を段階的に解説します。マーカーを立てて現在地を視覚的に確認できる、シンプルなサンプルアプリを一緒に作成していきましょう。ステップ1:新規プロジェクトの作成と依存関係の追加Android Studioを起動し、メニューから「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目を入力してプロジェクトの雛形を生成してください。続いて、build.gradle(Module: app)に以下の依存関係を追加します。implemen
-
【初心者向け】HTML5ジオロケーションとGoogleマップで現在地を表示する方法
HTML5のGeolocation API(ジオロケーションAPI)を使うと、Webサイトと位置情報を共有できるようになります。JavaScriptでデバイスの緯度・経度を取得し、そのデータをバックエンドのWebサーバーへ送信することで、周辺店舗の検索や地図上への現在地表示など、位置情報を活用したさまざまな機能を実装できます。ジオロケーションの座標は、デバイスの地理的な位置を正確に特定するための情報です。 getCurrentPosition()メソッドの仕組み Geolocation APIでは、getCurrentPosition()などのメソッドに対して、位置情報を取得するためのコールバ