آخرین مکان شناخته شده را دریافت کنید
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
با استفاده از API های مکان خدمات Google Play، برنامه شما می تواند آخرین مکان شناخته شده دستگاه کاربر را درخواست کند. در بیشتر موارد، شما به مکان فعلی کاربر علاقه مند هستید که معمولاً معادل آخرین مکان شناخته شده دستگاه است.
به طور خاص، از ارائه دهنده مکان ذوب شده برای بازیابی آخرین مکان شناخته شده دستگاه استفاده کنید. ارائهدهنده مکان ترکیبی یکی از APIهای مکان در سرویسهای Google Play است. این فناوری مکان اصلی را مدیریت میکند و یک API ساده ارائه میکند تا بتوانید الزامات را در سطح بالایی مانند دقت بالا یا قدرت کم مشخص کنید. همچنین استفاده دستگاه از باتری را بهینه می کند.
توجه: هنگامی که برنامه شما در پسزمینه اجرا میشود، دسترسی به مکان باید برای عملکرد اصلی برنامه حیاتی باشد و با افشای مناسب برای کاربران همراه باشد.
این درس به شما نشان میدهد که چگونه با استفاده از متد getLastLocation()
در ارائهدهنده مکان ذوب شده، یک درخواست واحد برای مکان یک دستگاه ایجاد کنید.
سرویس های Google Play را راه اندازی کنید
برای دسترسی به ارائهدهنده مکان ترکیبی، پروژه توسعه برنامه شما باید شامل خدمات Google Play باشد. مؤلفه خدمات Google Play را از طریق مدیر SDK دانلود و نصب کنید و کتابخانه را به پروژه خود اضافه کنید. برای جزئیات، به راهنمای تنظیم خدمات Google Play مراجعه کنید.
مجوزهای برنامه را مشخص کنید
برنامههایی که ویژگیهای آنها از خدمات مکان استفاده میکنند، بسته به موارد استفاده آن ویژگیها، باید مجوزهای مکان را درخواست کنند .
مشتری خدمات مکان ایجاد کنید
در متد onCreate()
فعالیت خود، یک نمونه از Fused Location Provider Client ایجاد کنید، همانطور که قطعه کد زیر نشان می دهد.
کاتلین
private lateinit var fusedLocationClient: FusedLocationProviderClient
override fun onCreate(savedInstanceState: Bundle?) {
// ...
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}
جاوا
private FusedLocationProviderClient fusedLocationClient;
// ..
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}
آخرین مکان شناخته شده را دریافت کنید
پس از ایجاد سرویس گیرنده موقعیت مکانی، می توانید آخرین مکان شناخته شده دستگاه کاربر را دریافت کنید. هنگامی که برنامه شما به این موارد متصل است، میتوانید از متد getLastLocation()
ارائهدهنده مکان ترکیبی برای بازیابی مکان دستگاه استفاده کنید. دقت مکان بازگردانده شده توسط این تماس با تنظیم مجوزی که در مانیفست برنامه خود قرار داده اید تعیین می شود، همانطور که در راهنمای نحوه درخواست مجوزهای مکان توضیح داده شده است.
برای درخواست آخرین مکان شناخته شده، متد getLastLocation()
را فراخوانی کنید. قطعه کد زیر درخواست و مدیریت ساده پاسخ را نشان می دهد:
کاتلین
fusedLocationClient.lastLocation
.addOnSuccessListener { location : Location? ->
// Got last known location. In some rare situations this can be null.
}
جاوا
fusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// Got last known location. In some rare situations this can be null.
if (location != null) {
// Logic to handle location object
}
}
});
متد getLastLocation()
یک Task
برمی گرداند که می توانید از آن برای دریافت یک شی Location
با مختصات طول و عرض جغرافیایی یک مکان جغرافیایی استفاده کنید. شی مکان ممکن است در شرایط زیر null
باشد:
- مکان در تنظیمات دستگاه خاموش است. حتی اگر آخرین مکان قبلاً بازیابی شده باشد، نتیجه می تواند
null
باشد زیرا غیرفعال کردن مکان نیز کش را پاک می کند. - دستگاه هرگز مکان خود را ثبت نکرده است، که می تواند در مورد دستگاه جدید یا دستگاهی باشد که به تنظیمات کارخانه بازیابی شده است.
- سرویسهای Google Play در دستگاه راهاندازی مجدد شده است، و هیچ سرویس گیرنده Fused Location Provider فعالی وجود ندارد که پس از راهاندازی مجدد سرویسها، مکان را درخواست کرده باشد. برای جلوگیری از این وضعیت میتوانید یک کلاینت جدید ایجاد کنید و خودتان درخواست بهروزرسانی مکان کنید. برای اطلاعات بیشتر، به درخواست بهروزرسانی مکان مراجعه کنید.
بهترین تخمین مکان را انتخاب کنید
FusedLocationProviderClient
چندین روش برای بازیابی اطلاعات مکان دستگاه ارائه می دهد. بسته به مورد استفاده برنامه خود یکی از موارد زیر را انتخاب کنید:
-
getLastLocation()
تخمین موقعیت مکانی را سریعتر دریافت می کند و مصرف باتری را که می تواند به برنامه شما نسبت داده شود به حداقل می رساند. با این حال، اگر هیچ مشتری دیگری اخیراً از موقعیت مکانی استفاده نکرده باشد، ممکن است اطلاعات مکان قدیمی باشد. getCurrentLocation()
مکان تازهتر و دقیقتری را بهطور پیوستهتر دریافت میکند. با این حال، این روش می تواند باعث شود که محاسبه مکان فعال روی دستگاه اتفاق بیفتد
این روش توصیه شده برای به دست آوردن یک مکان جدید در هر زمان ممکن است، و ایمن تر از گزینه های جایگزین مانند شروع و مدیریت به روز رسانی های مکان با استفاده از requestLocationUpdates()
. اگر برنامه شما requestLocationUpdates()
را فراخوانی کند، اگر مکان در دسترس نباشد، یا اگر پس از به دست آوردن یک مکان جدید، درخواست به درستی متوقف نشود، گاهی اوقات برنامه شما میتواند مقادیر زیادی انرژی مصرف کند.
منابع اضافی
برای اطلاعات بیشتر در مورد واکشی موقعیت مکانی فعلی در Android، مطالب زیر را مشاهده کنید:
نمونه ها
- نمونه برنامه برای نشان دادن بهترین شیوه ها در حین واکشی مکان فعلی.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-08-27 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-08-27 بهوقت ساعت هماهنگ جهانی."],[],[],null,["Using the Google Play services location APIs, your app can request the last\nknown location of the user's device. In most cases, you are interested in the\nuser's current location, which is usually equivalent to the last known\nlocation of the device.\n\nSpecifically, use the\n[fused\nlocation provider](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient.html) to retrieve the device's last known location. The fused\nlocation provider is one of the location APIs in Google Play services. It\nmanages the underlying location technology and provides a simple API so that\nyou can specify requirements at a high level, like high accuracy or low power.\nIt also optimizes the device's use of battery power. \n**Note:** When your app is running in the background,\n[access to location](/training/location/background) should be\ncritical to the core functionality of the app and is accompanied with proper\ndisclosure to users.\n\nThis lesson shows you how to make a single request for the location of a\ndevice using the\n[`getLastLocation()`](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient.html#getLastLocation())\nmethod in the fused location provider.\n\nSet up Google Play services\n\nTo access the fused location provider, your app's development project must\ninclude Google Play services. Download and install the Google Play services\ncomponent via the [SDK\nManager](/tools/help/sdk-manager) and add the library to your project. For details, see the guide to\n[Setting Up Google Play\nServices](/google/play-services/setup).\n\nSpecify app permissions\n\nApps whose features use location services must\n[request location permissions](/training/location/permissions),\ndepending on the use cases of those features.\n\nCreate location services client\n\nIn your activity's [onCreate()](/reference/android/app/Activity#onCreate(android.os.Bundle)) method,\ncreate an instance of the Fused Location Provider Client as the following code snippet shows. \n\nKotlin \n\n```kotlin\nprivate lateinit var fusedLocationClient: FusedLocationProviderClient\n\noverride fun onCreate(savedInstanceState: Bundle?) {\n // ...\n\n fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)\n}\n```\n\nJava \n\n```java\nprivate FusedLocationProviderClient fusedLocationClient;\n\n// ..\n\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n // ...\n\n fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);\n}\n```\n\nGet the last known location\n\nOnce you have created the Location Services client\nyou can get the last known location of a user's device. When your app is\nconnected to these you can use the fused location provider's\n[`getLastLocation()`](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient.html#getLastLocation())\nmethod to retrieve the device location. The precision of the location returned\nby this call is determined by the permission setting you put in your app\nmanifest, as described in the guide on how to\n[request location permissions](/training/location/permissions).\n\nTo request the last known location, call the\n[`getLastLocation()`](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient.html#getLastLocation())\nmethod. The following code snippet illustrates the request and a simple handling of the\nresponse: \n\nKotlin \n\n```kotlin\nfusedLocationClient.lastLocation\n .addOnSuccessListener { location : Location? -\u003e\n // Got last known location. In some rare situations this can be null.\n }\n```\n\nJava \n\n```java\nfusedLocationClient.getLastLocation()\n .addOnSuccessListener(this, new OnSuccessListener\u003cLocation\u003e() {\n @Override\n public void onSuccess(Location location) {\n // Got last known location. In some rare situations this can be null.\n if (location != null) {\n // Logic to handle location object\n }\n }\n });\n```\n\nThe\n[`getLastLocation()`](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient.html#getLastLocation())\nmethod returns a [`Task`](https://developers.google.com/android/reference/com/google/android/gms/tasks/Task)\nthat you can use to get a\n[`Location`](/reference/android/location/Location)\nobject with the latitude and longitude coordinates of a\ngeographic location. The location object may be `null` in the\nfollowing situations:\n\n- Location is turned off in the device settings. The result could be `null` even if the last location was previously retrieved because disabling location also clears the cache.\n- The device never recorded its location, which could be the case of a new device or a device that has been restored to factory settings.\n- Google Play services on the device has restarted, and there is no active Fused Location Provider client that has requested location after the services restarted. To avoid this situation you can create a new client and request location updates yourself. For more information, see [Request location\n updates](/training/location/receive-location-updates).\n\nChoose the best location estimate\n\nThe `FusedLocationProviderClient` provides several methods to retrieve device\nlocation information. Choose from one of the following, depending on your app's\nuse case:\n\n- [`getLastLocation()`](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient#getLastLocation()) gets a location estimate more quickly and minimizes battery usage that can be attributed to your app. However, the location information might be out of date, if no other clients have actively used location recently.\n- [`getCurrentLocation()`](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient#getCurrentLocation(int,%20com.google.android.gms.tasks.CancellationToken))\n gets a fresher, more accurate location more consistently. However, this method\n can cause active location computation to occur on the device\n\n This is the recommended way to get a fresh location, whenever possible, and\n is safer than alternatives like starting and managing location updates\n yourself using `requestLocationUpdates()`. If your app calls\n `requestLocationUpdates()`, your app can sometimes consume large amounts of\n power if location isn't available, or if the request isn't stopped correctly\n after obtaining a fresh location.\n\nAdditional resources\n\nFor more information about fetching current location in Android, view the\nfollowing materials:\n\nSamples\n\n- [Sample app](https://github.com/android/platform-samples/tree/main/samples/location/src/main/java/com/example/platform/location/currentLocation) to demonstrate best practices while fetching current location."]]