現在地を表示

この例では、現在地レイヤを有効にする方法と、[現在地] ボタンを使って地図上にデバイスの現在位置(青い点で表される)を表示する方法を示します。

詳しくは、こちらのドキュメントをご覧ください。

始める

サンプルコードを試す前に、開発環境を構成する必要があります。 詳しくは、Maps SDK for Android のコードサンプルをご覧ください。

コードを表示する

Kotlin

class MyLocationDemoActivity : AppCompatActivity(),     OnMyLocationButtonClickListener,     OnMyLocationClickListener, OnMapReadyCallback,     OnRequestPermissionsResultCallback {     /**      * Flag indicating whether a requested permission has been denied after returning in      * [.onRequestPermissionsResult].      */     private var permissionDenied = false     private lateinit var map: GoogleMap     override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         setContentView(R.layout.my_location_demo)         val mapFragment =             supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?         mapFragment?.getMapAsync(this)     }      override fun onMapReady(googleMap: GoogleMap) {         map = googleMap         googleMap.setOnMyLocationButtonClickListener(this)         googleMap.setOnMyLocationClickListener(this)         enableMyLocation()     }      /**      * Enables the My Location layer if the fine location permission has been granted.      */     @SuppressLint("MissingPermission")     private fun enableMyLocation() {          // 1. Check if permissions are granted, if so, enable the my location layer         if (ContextCompat.checkSelfPermission(                 this,                 Manifest.permission.ACCESS_FINE_LOCATION             ) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(                 this,                 Manifest.permission.ACCESS_COARSE_LOCATION             ) == PackageManager.PERMISSION_GRANTED         ) {             map.isMyLocationEnabled = true             return         }          // 2. If if a permission rationale dialog should be shown         if (ActivityCompat.shouldShowRequestPermissionRationale(                 this,                 Manifest.permission.ACCESS_FINE_LOCATION             ) || ActivityCompat.shouldShowRequestPermissionRationale(                 this,                 Manifest.permission.ACCESS_COARSE_LOCATION             )         ) {             PermissionUtils.RationaleDialog.newInstance(                 LOCATION_PERMISSION_REQUEST_CODE, true             ).show(supportFragmentManager, "dialog")             return         }          // 3. Otherwise, request permission         ActivityCompat.requestPermissions(             this,             arrayOf(                 Manifest.permission.ACCESS_FINE_LOCATION,                 Manifest.permission.ACCESS_COARSE_LOCATION             ),             LOCATION_PERMISSION_REQUEST_CODE         )     }      override fun onMyLocationButtonClick(): Boolean {         Toast.makeText(this, "MyLocation button clicked", Toast.LENGTH_SHORT)             .show()         // Return false so that we don't consume the event and the default behavior still occurs         // (the camera animates to the user's current position).         return false     }      override fun onMyLocationClick(location: Location) {         Toast.makeText(this, "Current location:\n$location", Toast.LENGTH_LONG)             .show()     }      override fun onRequestPermissionsResult(         requestCode: Int,         permissions: Array<String>,         grantResults: IntArray     ) {         if (requestCode != LOCATION_PERMISSION_REQUEST_CODE) {             super.onRequestPermissionsResult(                 requestCode,                 permissions,                 grantResults             )             return         }          if (isPermissionGranted(                 permissions,                 grantResults,                 Manifest.permission.ACCESS_FINE_LOCATION             ) || isPermissionGranted(                 permissions,                 grantResults,                 Manifest.permission.ACCESS_COARSE_LOCATION             )         ) {             // Enable the my location layer if the permission has been granted.             enableMyLocation()         } else {             // Permission was denied. Display an error message             // ...         }     }      override fun onResumeFragments() {         super.onResumeFragments()         if (permissionDenied) {             // Permission was not granted, display error dialog.             showMissingPermissionError()             permissionDenied = false         }     }      /**      * Displays a dialog with error message explaining that the location permission is missing.      */     private fun showMissingPermissionError() {         newInstance(true).show(supportFragmentManager, "dialog")     }      companion object {         /**          * Request code for location permission request.          *          * @see .onRequestPermissionsResult          */         private const val LOCATION_PERMISSION_REQUEST_CODE = 1     } }        

Java

public class MyLocationDemoActivity extends SamplesBaseActivity     implements     OnMyLocationButtonClickListener,     OnMyLocationClickListener,     OnMapReadyCallback,     ActivityCompat.OnRequestPermissionsResultCallback {      /**      * Request code for location permission request.      *      * @see #onRequestPermissionsResult(int, String[], int[])      */     private static final int LOCATION_PERMISSION_REQUEST_CODE = 1;      /**      * Flag indicating whether a requested permission has been denied after returning in {@link      * #onRequestPermissionsResult(int, String[], int[])}.      */     private boolean permissionDenied = false;      private GoogleMap map;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.my_location_demo);          SupportMapFragment mapFragment =             (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);         mapFragment.getMapAsync(this);         applyInsets(findViewById(R.id.map_container));     }      @Override     public void onMapReady(@NonNull GoogleMap googleMap) {         map = googleMap;         map.setOnMyLocationButtonClickListener(this);         map.setOnMyLocationClickListener(this);         enableMyLocation();     }      /**      * Enables the My Location layer if the fine location permission has been granted.      */     @SuppressLint("MissingPermission")     private void enableMyLocation() {         // 1. Check if permissions are granted, if so, enable the my location layer         if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)             == PackageManager.PERMISSION_GRANTED             || ContextCompat.checkSelfPermission(this, permission.ACCESS_COARSE_LOCATION)             == PackageManager.PERMISSION_GRANTED) {             map.setMyLocationEnabled(true);             return;         }          // 2. Otherwise, request location permissions from the user.         PermissionUtils.requestLocationPermissions(this, LOCATION_PERMISSION_REQUEST_CODE, true);     }      @Override     public boolean onMyLocationButtonClick() {         Toast.makeText(this, "MyLocation button clicked", Toast.LENGTH_SHORT).show();         // Return false so that we don't consume the event and the default behavior still occurs         // (the camera animates to the user's current position).         return false;     }      @Override     public void onMyLocationClick(@NonNull Location location) {         Toast.makeText(this, "Current location:\n" + location, Toast.LENGTH_LONG).show();     }      @Override     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,         @NonNull int[] grantResults) {         if (requestCode != LOCATION_PERMISSION_REQUEST_CODE) {             super.onRequestPermissionsResult(requestCode, permissions, grantResults);             return;         }          if (PermissionUtils.isPermissionGranted(permissions, grantResults,             Manifest.permission.ACCESS_FINE_LOCATION) || PermissionUtils             .isPermissionGranted(permissions, grantResults,                 Manifest.permission.ACCESS_COARSE_LOCATION)) {             // Enable the my location layer if the permission has been granted.             enableMyLocation();         } else {             // Permission was denied. Display an error message             // ...         }     }      @Override     protected void onResumeFragments() {         super.onResumeFragments();         if (permissionDenied) {             // Permission was not granted, display error dialog.             showMissingPermissionError();             permissionDenied = false;         }     }      /**      * Displays a dialog with error message explaining that the location permission is missing.      */     private void showMissingPermissionError() {         PermissionUtils.PermissionDeniedDialog             .newInstance(true).show(getSupportFragmentManager(), "dialog");     }  }        

サンプルのクローンを作成して実行する

このサンプルをローカルで実行するには、Git が必要です。次のコマンドで、サンプルアプリ リポジトリのクローンを作成します。

git clone [email protected]:googlemaps-samples/android-samples.git

サンプル プロジェクトを Android Studio にインポートします。

  1. Android Studio で、[File] > [New] > [Import Project] を選択します。
  2. リポジトリの保存先に移動し、Kotlin または Java のプロジェクト ディレクトリを選択します。

    • Kotlin: PATH-REPO/android-samples/ApiDemos/kotlin
    • Java: PATH-REPO/android-samples/ApiDemos/java
  3. [Open] を選択します。Android Studio が Gradle ビルドツールを使用してプロジェクトをビルドします。
  4. プロジェクトの local.properties ファイルと同じディレクトリに空の secrets.properties ファイルを作成します。詳しくは、API キーをプロジェクトに追加するをご覧ください。
  5. 次の文字列を secrets.properties に追加し、YOUR_API_KEY を実際の API キーの値に置き換えます。

    MAPS_API_KEY=YOUR_API_KEY
  6. アプリを実行します。