Location Data

ฟีเจอร์เฉพาะอย่างหนึ่งของแอปพลิเคชันบนอุปกรณ์เคลื่อนที่คือการรับรู้ถึงตำแหน่ง ผู้ใช้มือถือจะนำอุปกรณ์ติดตัวไปทุกที่ และการเพิ่มการรับรู้ถึงตำแหน่งลงในแอปจะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่สอดคล้องกับบริบทมากขึ้น

ตัวอย่างโค้ด

ที่เก็บ ApiDemos ใน GitHub มีตัวอย่างที่สาธิตการใช้ตำแหน่งบนแผนที่ ดังนี้

Kotlin

Java

การทำงานกับข้อมูลตำแหน่ง

ข้อมูลตำแหน่งที่อุปกรณ์ Android มีนั้นรวมถึงตำแหน่งปัจจุบันของอุปกรณ์ ซึ่งระบุโดยใช้เทคโนโลยีหลายอย่างร่วมกัน ทิศทางและวิธีการเคลื่อนที่ และข้อมูลที่ว่าอุปกรณ์ได้เคลื่อนที่ข้ามขอบเขตทางภูมิศาสตร์ที่กำหนดไว้ล่วงหน้าหรือเขตพื้นที่เสมือนหรือไม่ คุณเลือกวิธีทำงานกับข้อมูลตำแหน่งได้หลายวิธีตามความต้องการของแอปพลิเคชัน ดังนี้

  • เลเยอร์ตำแหน่งของฉันเป็นวิธีง่ายๆ ในการแสดงตำแหน่งของอุปกรณ์บนแผนที่ โดยจะไม่ให้ข้อมูล
  • เราขอแนะนำให้ใช้ API ตำแหน่งของบริการ Google Play สำหรับคำขอข้อมูลตำแหน่งแบบเป็นโปรแกรมทั้งหมด
  • อินเทอร์เฟซ LocationSource ช่วยให้คุณระบุผู้ให้บริการตำแหน่งที่กำหนดเองได้

สิทธิ์เข้าถึงตำแหน่ง

หากแอปของคุณจำเป็นต้องเข้าถึงตำแหน่งของผู้ใช้ คุณต้องขอสิทธิ์โดยเพิ่มสิทธิ์เข้าถึงตำแหน่งของ Android ที่เกี่ยวข้องลงในแอป

Android มีสิทธิ์เข้าถึงตำแหน่ง 2 แบบ ได้แก่ ACCESS_COARSE_LOCATION และ ACCESS_FINE_LOCATION สิทธิ์ที่คุณเลือกจะเป็นตัวกำหนดความแม่นยำของตำแหน่งที่ API แสดงผล

  • android.permission.ACCESS_COARSE_LOCATION - อนุญาตให้ API แสดงผลตำแหน่งโดยประมาณของอุปกรณ์ สิทธิ์นี้จะให้ค่าประมาณตำแหน่งของอุปกรณ์จากบริการตำแหน่ง ตามที่อธิบายไว้ในเอกสารประกอบเกี่ยวกับความแม่นยำของตำแหน่งโดยประมาณ
  • android.permission.ACCESS_FINE_LOCATION – อนุญาตให้ API ระบุตำแหน่งที่แม่นยำที่สุดเท่าที่จะเป็นไปได้จากผู้ให้บริการตำแหน่งที่พร้อมใช้งาน ซึ่งรวมถึงระบบดาวเทียมนำร่อง (GPS) ตลอดจนข้อมูล Wi-Fi และเครือข่ายมือถือ

เพิ่มสิทธิ์ลงในไฟล์ Manifest ของแอป

หากแอปของคุณต้องการเพียงตำแหน่งโดยประมาณเพื่อทำงาน ให้เพิ่มสิทธิ์ ACCESS_COARSE_LOCATION ลงในไฟล์ Manifest ของแอป ดังนี้

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
  ...
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  ...
</manifest>

อย่างไรก็ตาม หากจำเป็นต้องใช้ตำแหน่งที่แน่นอน ให้เพิ่มทั้งสิทธิ์ ACCESS_COARSE_LOCATION และ ACCESS_FINE_LOCATION ลงในไฟล์ Manifest ของแอป ดังนี้

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
  ...
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  ...
</manifest>

ขอสิทธิ์รันไทม์

Android 6.0 (Marshmallow) เปิดตัวโมเดลใหม่สำหรับการจัดการสิทธิ์ ซึ่งช่วยปรับปรุงกระบวนการสำหรับผู้ใช้เมื่อติดตั้งและอัปเกรดแอป หากแอปกำหนดเป้าหมายเป็น API ระดับ 23 ขึ้นไป คุณจะใช้โมเดลสิทธิ์ใหม่ได้

หากแอปของคุณรองรับโมเดลสิทธิ์ใหม่และอุปกรณ์ใช้ Android 6.0 (Marshmallow) ขึ้นไป ผู้ใช้ไม่จำเป็นต้องให้สิทธิ์ใดๆ เมื่อติดตั้งหรืออัปเกรดแอป แอปต้องตรวจสอบว่ามีสิทธิ์ที่จำเป็นในรันไทม์หรือไม่ และขอสิทธิ์หากไม่มี ระบบจะแสดงกล่องโต้ตอบแก่ผู้ใช้เพื่อขอสิทธิ์

คุณควรขอสิทธิ์ในบริบทเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีที่สุด หากตำแหน่งเป็นสิ่งสำคัญต่อการทำงานของแอป คุณควรขอสิทธิ์เข้าถึงตำแหน่งเมื่อเริ่มต้นแอป วิธีที่ดีในการดำเนินการนี้คือการใช้หน้าจอต้อนรับหรือวิซาร์ดที่อบอุ่นซึ่งให้ความรู้แก่ผู้ใช้เกี่ยวกับสาเหตุที่ต้องขอสิทธิ์

หากแอปต้องใช้สิทธิ์สำหรับฟังก์ชันการทำงานเพียงบางส่วน คุณควรขอสิทธิ์เข้าถึงตำแหน่งในขณะที่แอปดำเนินการที่ต้องใช้สิทธิ์

แอปต้องจัดการกรณีที่ผู้ใช้ไม่ให้สิทธิ์อย่างเหมาะสม เช่น หากจำเป็นต้องใช้สิทธิ์สำหรับฟีเจอร์หนึ่งๆ แอปจะปิดใช้ฟีเจอร์นั้นได้ หากสิทธิ์เป็นสิ่งจำเป็นต่อการทำงานของแอป แอปสามารถปิดใช้ฟังก์ชันการทำงานทั้งหมดและแจ้งให้ผู้ใช้ทราบว่าต้องให้สิทธิ์

ตัวอย่างโค้ดต่อไปนี้จะตรวจสอบสิทธิ์โดยใช้ไลบรารี AndroidX ก่อนเปิดใช้เลเยอร์ตำแหน่งของฉัน จากนั้นจะจัดการผลลัพธ์ของคำขอสิทธิ์โดยใช้ ActivityCompat.OnRequestPermissionsResultCallback จากไลบรารีสนับสนุน ดังนี้

Kotlin

// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.example.kotlindemos

import android.Manifest
import android.annotation.SuppressLint
import android.content.pm.PackageManager
import android.location.Location
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.app.ActivityCompat.OnRequestPermissionsResultCallback
import androidx.core.content.ContextCompat
import com.example.common_ui.R
import com.example.common_ui.catalog.Complexity
import com.example.common_ui.catalog.Framework
import com.example.common_ui.catalog.Sample
import com.example.kotlindemos.PermissionUtils.PermissionDeniedDialog.Companion.newInstance
import com.example.kotlindemos.PermissionUtils.isPermissionGranted
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.GoogleMap.OnMyLocationButtonClickListener
import com.google.android.gms.maps.GoogleMap.OnMyLocationClickListener
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.SupportMapFragment

/**
 * This demo shows how GMS Location can be used to check for changes to the users location.  The
 * "My Location" button uses GMS Location to set the blue dot representing the users location.
 * Permission for [Manifest.permission.ACCESS_FINE_LOCATION] and [Manifest.permission.ACCESS_COARSE_LOCATION]
 * are requested at run time. If either permission is not granted, the Activity is finished with an error message.
 */
@Sample(
    id = "com.example.kotlindemos.MyLocationDemoActivity",
    title = "My Location Layer",
    description = "Enabling blue dot location indicator and My Location button with runtime permissions.",
    category = "Location & Sensors",
    complexity = Complexity.SIMPLE,
    tags = ["#location", "#mylocation", "#permissions", "#bluedot"],
    purpose = "Demonstrates requesting ACCESS_FINE_LOCATION permissions and enabling the blue dot location layer.",
    successCriteria = "Tapping My Location button centers camera on user's current GPS position.",
    failureIndicators = "Permission denial causes unhandled crash or location button missing.",
    framework = Framework.KOTLIN_VIEWS,
)
class MyLocationDemoActivity :
    SamplesBaseActivity(),
    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)
        applyInsets(findViewById(R.id.map_container))
    }

    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
            // Display the missing permission error dialog when the fragments resume.
            permissionDenied = true
        }
    }

    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

// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.example.mapdemo;

import android.Manifest;
import android.Manifest.permission;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.example.common_ui.catalog.Complexity;
import com.example.common_ui.catalog.Framework;
import com.example.common_ui.catalog.Sample;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMyLocationButtonClickListener;
import com.google.android.gms.maps.GoogleMap.OnMyLocationClickListener;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;

/**
 * This demo shows how GMS Location can be used to check for changes to the users location. The "My
 * Location" button uses GMS Location to set the blue dot representing the users location.
 * Permission for {@link android.Manifest.permission#ACCESS_FINE_LOCATION} and {@link
 * android.Manifest.permission#ACCESS_COARSE_LOCATION} are requested at run time. If either
 * permission is not granted, the Activity is finished with an error message.
 */
@Sample(
        id = "my_location",
        title = "My Location Layer",
        description =
                "Enabling blue dot location indicator and My Location button with runtime permissions.",
        category = "Location & Sensors",
        complexity = Complexity.SIMPLE,
        tags = {"#location", "#mylocation", "#permissions", "#bluedot"},
        purpose =
                "Demonstrates requesting ACCESS_FINE_LOCATION permissions and enabling the blue dot location layer.",
        successCriteria =
                "Tapping My Location button centers camera on user's current GPS position.",
        failureIndicators = "Permission denial causes unhandled crash or location button missing.",
        framework = Framework.JAVA_VIEWS)
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(com.example.common_ui.R.layout.my_location_demo);

        SupportMapFragment mapFragment =
                (SupportMapFragment)
                        getSupportFragmentManager()
                                .findFragmentById(com.example.common_ui.R.id.map);
        mapFragment.getMapAsync(this);
        applyInsets(findViewById(com.example.common_ui.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
            // Display the missing permission error dialog when the fragments resume.
            permissionDenied = true;
        }
    }


    @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");
    }
}

เลเยอร์ตำแหน่งของฉัน

คุณสามารถใช้เลเยอร์ตำแหน่งของฉันและปุ่มตำแหน่งของฉันเพื่อแสดงตำแหน่งปัจจุบันของผู้ใช้บนแผนที่ เรียกใช้ mMap.setMyLocationEnabled() เพื่อเปิดใช้เลเยอร์ตำแหน่งของฉันบนแผนที่

ตัวอย่างต่อไปนี้แสดงการใช้งานเลเยอร์ตำแหน่งของฉันแบบง่ายๆ

Kotlin

// TODO: Before enabling the My Location layer, you must request
// location permission from the user. This sample does not include
// a request for location permission.
map.setMyLocationEnabled(true)
map.setOnMyLocationButtonClickListener {
    Toast.makeText(context, "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).
    false
}
map.setOnMyLocationClickListener { location ->
    Toast.makeText(context, "Current location:\n$location", Toast.LENGTH_LONG).show()
}

      

Java

// TODO: Before enabling the My Location layer, you must request
// location permission from the user. This sample does not include
// a request for location permission.
map.setMyLocationEnabled(true);
map.setOnMyLocationButtonClickListener(
        new GoogleMap.OnMyLocationButtonClickListener() {
            @Override
            public boolean onMyLocationButtonClick() {
                Toast.makeText(context, "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;
            }
        });
map.setOnMyLocationClickListener(
        new GoogleMap.OnMyLocationClickListener() {
            @Override
            public void onMyLocationClick(@NonNull Location location) {
                Toast.makeText(context, "Current location:\n" + location, Toast.LENGTH_LONG)
                        .show();
            }
        });

      

เมื่อเปิดใช้เลเยอร์ตำแหน่งของฉัน ปุ่มตำแหน่งของฉันจะปรากฏที่มุมขวาบนของแผนที่ เมื่อผู้ใช้คลิกปุ่ม กล้องจะจัดแผนที่ให้อยู่ตรงกลางตำแหน่งปัจจุบันของอุปกรณ์ หากทราบตำแหน่ง ตำแหน่งจะแสดงบนแผนที่ด้วยจุดสีน้ำเงินเล็กๆ หากอุปกรณ์อยู่กับที่ หรือเป็นเครื่องหมายบั้งหากอุปกรณ์กำลังเคลื่อนที่

ภาพหน้าจอต่อไปนี้แสดงปุ่มตำแหน่งของฉันที่ด้านขวาบนและจุดสีน้ำเงินของตำแหน่งของฉันที่กึ่งกลางแผนที่

คุณป้องกันไม่ให้ปุ่มตำแหน่งของฉันปรากฏได้โดยเรียกใช้ UiSettings.setMyLocationButtonEnabled(false)

แอปของคุณสามารถตอบสนองต่อเหตุการณ์ต่อไปนี้

  • หากผู้ใช้คลิกปุ่มตำแหน่งของฉัน แอปของคุณจะได้รับ Callback onMyLocationButtonClick() จาก GoogleMap.OnMyLocationButtonClickListener
  • หากผู้ใช้คลิกจุดสีน้ำเงิน "ตำแหน่งของฉัน" แอปของคุณจะได้รับ Callback onMyLocationClick() จาก GoogleMap.OnMyLocationClickListener

API ตำแหน่งของบริการ Google Play

API สถานที่ของบริการ Google Play เป็นวิธีที่แนะนำสำหรับการเพิ่มการรับรู้ถึงตำแหน่งลงในแอปพลิเคชัน Android ซึ่งมีฟังก์ชันการทำงานที่ช่วยให้คุณทำสิ่งต่อไปนี้ได้

  • ระบุตำแหน่งของอุปกรณ์
  • ฟังการเปลี่ยนแปลงตำแหน่ง
  • ระบุโหมดการเดินทาง หากอุปกรณ์มีการเคลื่อนที่
  • สร้างและตรวจสอบพื้นที่ทางภูมิศาสตร์ที่กำหนดไว้ล่วงหน้า หรือที่เรียกว่าเขตพื้นที่เสมือน

API สถานที่ช่วยให้คุณสร้างแอปพลิเคชันที่ประหยัดพลังงานและรับรู้ถึงตำแหน่งได้ง่ายๆ API ตำแหน่งจะเผยแพร่เป็นส่วนหนึ่งของ SDK บริการ Google Play เช่นเดียวกับ Maps SDK สำหรับ Android ดูข้อมูลเพิ่มเติมเกี่ยวกับ API สถานที่ได้ที่ชั้นเรียนการฝึกอบรม Android เรื่องการทำให้แอปของคุณรับรู้ตำแหน่งหรือเอกสารอ้างอิง API สถานที่ ตัวอย่างโค้ดจะรวมอยู่ใน SDK ของบริการ Google Play