به روز رسانی مکان را در اندروید با Kotlin دریافت کنید

1. قبل از شروع

اندروید 10 و 11 به کاربران کنترل بیشتری بر دسترسی برنامه هایشان به مکان های دستگاهشان می دهد.

هنگامی که برنامه ای که روی اندروید 11 اجرا می شود، درخواست دسترسی به مکان می کند، کاربران چهار گزینه دارند:

  • همیشه اجازه دهید
  • فقط هنگام استفاده از برنامه مجاز باشد (در Android 10)
  • فقط یک بار (در اندروید 11)
  • تکذیب کنید

اندروید 10

6a1029175b467c77.png

اندروید 11

73d8cc88c5877c25.png

در این کد لبه، نحوه دریافت به‌روزرسانی‌های موقعیت مکانی و نحوه پشتیبانی از موقعیت مکانی را در هر نسخه از اندروید، به‌ویژه اندروید 10 و 11، یاد می‌گیرید. در پایان کد لبه، می‌توانید انتظار داشته باشید که برنامه‌ای داشته باشید که از بهترین شیوه‌های فعلی برای بازیابی پیروی می‌کند. به روز رسانی مکان

پیش نیازها

کاری که خواهی کرد

  • بهترین شیوه ها را برای مکان در اندروید دنبال کنید.
  • مجوزهای موقعیت مکانی پیش زمینه را کنترل کنید (زمانی که کاربر درخواست می کند برنامه شما به مکان دستگاه دسترسی داشته باشد در حالی که برنامه شما در حال استفاده است).
  • یک برنامه موجود را تغییر دهید تا با افزودن کد برای اشتراک و لغو اشتراک مکان، پشتیبانی برای درخواست دسترسی به مکان اضافه شود.
  • با افزودن منطق برای دسترسی به موقعیت مکانی در مکان پیش‌زمینه یا در حین استفاده، پشتیبانی را به برنامه اندروید 10 و 11 اضافه کنید.

آنچه شما نیاز دارید

  • اندروید استودیو 3.4 یا بالاتر برای اجرای کد
  • دستگاه/شبیه‌ساز که پیش‌نمایش توسعه‌دهنده اندروید 10 و 11 را اجرا می‌کند

2. شروع به کار

مخزن پروژه شروع کننده را کلون کنید

برای شروع هر چه سریع‌تر، می‌توانید این پروژه آغازین را بسازید. اگر Git را نصب کرده اید، می توانید به سادگی دستور زیر را اجرا کنید:

 git clone https://github.com/android/codelab-while-in-use-location

به راحتی می توانید مستقیماً از صفحه GitHub دیدن کنید.

اگر Git ندارید، می توانید پروژه را به صورت فایل فشرده دریافت کنید:

پروژه را وارد کنید

اندروید استودیو را باز کنید، از صفحه خوش آمد گویی " باز کردن پروژه اندروید استودیو موجود " را انتخاب کنید و دایرکتوری پروژه را باز کنید.

پس از بارگیری پروژه، ممکن است هشداری نیز ببینید که Git تمام تغییرات محلی شما را ردیابی نمی کند. می توانید روی نادیده گرفتن کلیک کنید. (شما هیچ تغییری را به مخزن Git برنمی‌گردانید.)

در گوشه سمت چپ بالای پنجره پروژه، اگر در نمای اندروید هستید، باید چیزی شبیه به تصویر زیر ببینید. (اگر در نمای پروژه هستید، باید پروژه را گسترش دهید تا همان مورد را ببینید.)

fa825dae96c5dc18.png

دو پوشه ( base و complete ) وجود دارد. هر کدام به عنوان یک "ماژول" شناخته می شوند.

لطفاً توجه داشته باشید که Android Studio ممکن است چند ثانیه طول بکشد تا پروژه در پس‌زمینه برای اولین بار کامپایل شود. در این مدت، پیام زیر را در نوار وضعیت در پایین Android Studio مشاهده می کنید:

c2273e7835c0841a.png

قبل از اعمال تغییرات کد، منتظر بمانید تا Android Studio ایندکس و ساخت پروژه را تمام کند. این به Android Studio اجازه می دهد تا تمام اجزای لازم را وارد کند.

اگر درخواستی دریافت کردید که می گوید Reload برای اعمال تغییرات زبان؟ یا چیزی مشابه، بله را انتخاب کنید.

پروژه شروع را درک کنید

شما راه اندازی شده اید و آماده درخواست مکان در برنامه هستید. از ماژول base به عنوان نقطه شروع استفاده کنید. در طول هر مرحله، کد را به ماژول base اضافه کنید. تا زمانی که کار با این کد لبه تمام شد، کد موجود در ماژول base باید با محتوای ماژول complete مطابقت داشته باشد. ماژول complete را می توان برای بررسی کار خود یا برای ارجاع در صورت مواجهه با هر گونه مشکل استفاده کرد.

اجزای اصلی شامل موارد زیر است:

  • MainActivity - رابط کاربری برای کاربر که به برنامه اجازه می دهد به مکان دستگاه دسترسی داشته باشد
  • LocationService — سرویسی که مشترک و لغو اشتراک در تغییرات مکان می شود و در صورتی که کاربر از فعالیت برنامه دور شود، خود را به یک سرویس پیش زمینه (با یک اعلان) ارتقا می دهد. شما کد مکان را در اینجا اضافه کنید.
  • Util — توابع افزونه را برای کلاس Location اضافه می کند و مکان را در SharedPreferences (لایه داده ساده شده) ذخیره می کند.

راه اندازی شبیه ساز

برای اطلاعات در مورد راه‌اندازی شبیه‌ساز Android، به اجرای روی شبیه‌ساز مراجعه کنید.

پروژه استارت را اجرا کنید

برنامه خود را اجرا کنید

  1. دستگاه اندروید خود را به رایانه خود وصل کنید یا یک شبیه ساز راه اندازی کنید. (مطمئن شوید که دستگاه دارای اندروید 10 یا بالاتر باشد.)
  2. در نوار ابزار، پیکربندی base را از انتخابگر کشویی انتخاب کنید و روی Run کلیک کنید:

99600e9d44527ab.png

  1. توجه داشته باشید که برنامه زیر در دستگاه شما ظاهر می شود:

99bf1dae46f99af3.png

ممکن است متوجه شوید که هیچ اطلاعات مکانی در صفحه خروجی ظاهر نمی شود. دلیلش این است که هنوز کد مکان را اضافه نکرده اید.

3. اضافه کردن مکان

مفاهیم

تمرکز این کد لبه این است که به شما نشان دهد چگونه به‌روزرسانی‌های مکان را دریافت کنید و در نهایت از اندروید 10 و اندروید 11 پشتیبانی کنید.

با این حال، قبل از شروع کدنویسی، منطقی است که اصول اولیه را مرور کنید.

انواع دسترسی به مکان

ممکن است چهار گزینه مختلف برای دسترسی به موقعیت مکانی را از ابتدای صفحه کد به خاطر بسپارید. به معنای آنها نگاه کنید:

  • فقط هنگام استفاده از برنامه مجاز است
  • این گزینه برای اکثر برنامه ها گزینه پیشنهادی است. این گزینه همچنین به عنوان دسترسی «هنگام استفاده» یا «فقط پیش‌زمینه» شناخته می‌شود، این گزینه در اندروید 10 اضافه شد و به توسعه‌دهندگان این امکان را می‌دهد که مکان را فقط در زمانی که برنامه به طور فعال استفاده می‌شود، بازیابی کنند. اگر یکی از موارد زیر درست باشد، یک برنامه فعال در نظر گرفته می شود:
  • یک فعالیت قابل مشاهده است.
  • یک سرویس پیش زمینه با یک اعلان در حال اجرا است.
  • فقط یک بار
  • در Android 11 اضافه شده است، این همان Allow only هنگام استفاده از برنامه است، اما برای مدت زمان محدود. برای اطلاعات بیشتر، به مجوزهای یکبار مصرف مراجعه کنید.
  • تکذیب کنید
  • این گزینه از دسترسی به اطلاعات موقعیت مکانی جلوگیری می کند.
  • همیشه اجازه دهید
  • این گزینه دسترسی به موقعیت مکانی را همیشه امکان پذیر می کند، اما برای اندروید 10 و بالاتر به مجوز اضافی نیاز دارد . همچنین باید مطمئن شوید که مورد استفاده معتبری دارید و از خط‌مشی‌های مکان پیروی می‌کنید. شما این گزینه را در این نرم افزار کد پوشش نمی دهید، زیرا یک مورد استفاده نادر است. با این حال، اگر یک مورد استفاده معتبر دارید و می‌خواهید بدانید که چگونه می‌توانید موقعیت مکانی را همیشه از جمله دسترسی به مکان در پس‌زمینه به درستی مدیریت کنید، نمونه LocationUpdatesBackgroundKotlin را مرور کنید.

خدمات، خدمات پیش زمینه، و الزام آور

برای پشتیبانی کامل از «فقط مجاز» هنگام استفاده از به‌روزرسانی‌های مکان برنامه ، باید زمانی را که کاربر از برنامه شما دور می‌شود، حساب کنید. اگر می‌خواهید در آن موقعیت به دریافت به‌روزرسانی‌ها ادامه دهید، باید یک Service پیش‌زمینه ایجاد کنید و آن را با یک Notification مرتبط کنید.

به‌علاوه، اگر می‌خواهید از همان Service برای درخواست به‌روزرسانی موقعیت مکانی زمانی که برنامه شما قابل مشاهده است و زمانی که کاربر از برنامه شما دور می‌شود، استفاده کنید، باید آن Service به عنصر UI متصل/لغو کنید.

از آنجایی که این Codelab فقط بر روی دریافت به‌روزرسانی‌های مکان تمرکز می‌کند، می‌توانید تمام کدهای مورد نیاز خود را در کلاس ForegroundOnlyLocationService.kt پیدا کنید. می توانید آن کلاس و MainActivity.kt را مرور کنید تا ببینید چگونه با هم کار می کنند.

برای اطلاعات بیشتر، به نمای کلی خدمات و نمای کلی خدمات محدود مراجعه کنید.

مجوزها

برای دریافت به‌روزرسانی‌های مکان از NETWORK_PROVIDER یا GPS_PROVIDER ، باید با اعلام مجوز ACCESS_COARSE_LOCATION یا ACCESS_FINE_LOCATION به ترتیب در فایل مانیفست Android خود، اجازه کاربر را درخواست کنید. بدون این مجوزها، برنامه شما نمی‌تواند در زمان اجرا درخواست دسترسی به مکان کند.

زمانی که برنامه شما در دستگاهی با Android 10 یا بالاتر استفاده می‌شود، این مجوزها فقط یک بار و فقط در هنگام استفاده از برنامه‌ها مجاز است .

مکان

برنامه شما می‌تواند از طریق کلاس‌های موجود در بسته com.google.android.gms.location به مجموعه خدمات مکان پشتیبانی‌شده دسترسی پیدا کند.

به کلاس های اصلی نگاه کنید:

  • FusedLocationProviderClient
  • این جزء مرکزی چارچوب مکان است. پس از ایجاد، از آن برای درخواست به روز رسانی مکان و دریافت آخرین مکان شناخته شده استفاده می کنید.
  • LocationRequest
  • این یک شی داده است که شامل پارامترهای کیفیت خدمات برای درخواست‌ها (فاصله‌های به‌روزرسانی، اولویت‌ها و دقت) است. هنگامی که درخواست به‌روزرسانی مکان می‌کنید، به FusedLocationProviderClient ارسال می‌شود.
  • LocationCallback
  • هنگامی که مکان دستگاه تغییر کرده یا دیگر نمی توان آن را تعیین کرد، از این برای دریافت اعلان استفاده می شود. این یک LocationResult ارسال می شود که در آن می توانید Location برای ذخیره در پایگاه داده خود دریافت کنید.

اکنون که یک ایده اولیه از کاری که انجام می دهید دارید، با کد شروع کنید!

4. ویژگی های مکان را اضافه کنید

این کد لبه روی رایج‌ترین گزینه مکان متمرکز است: فقط هنگام استفاده از برنامه مجاز باشد .

برای دریافت به‌روزرسانی‌های مکان، برنامه شما باید یک فعالیت قابل مشاهده یا یک سرویس در پیش‌زمینه (با یک اعلان) در حال اجرا داشته باشد.

مجوزها

هدف این کد لبه نشان دادن نحوه دریافت به‌روزرسانی‌های مکان است، نه نحوه درخواست مجوزهای مکان، بنابراین کد مبتنی بر مجوز قبلاً برای شما نوشته شده است. اگر قبلاً آن را فهمیده اید، راحت از آن بگذرید.

موارد زیر نکات برجسته مجوز هستند (برای این بخش هیچ اقدامی لازم نیست):

  1. اعلام کنید از چه مجوزی در AndroidManifest.xml استفاده می کنید.
  2. قبل از تلاش برای دسترسی به اطلاعات مکان، بررسی کنید که آیا کاربر به برنامه شما اجازه این کار را داده است یا خیر. اگر برنامه شما هنوز مجوز دریافت نکرده است، درخواست دسترسی کنید.
  3. انتخاب مجوز کاربر را مدیریت کنید. (این کد را می توانید در MainActivity.kt ببینید.)

اگر TODO: Step 1.0, Review Permissions در AndroidManifest.xml یا MainActivity.kt جستجو کنید، همه کدهای نوشته شده برای مجوزها را می بینید.

برای اطلاعات بیشتر، به نمای کلی مجوزها مراجعه کنید.

اکنون، شروع به نوشتن کد مکان کنید.

متغیرهای کلیدی مورد نیاز برای به‌روزرسانی مکان را مرور کنید

در ماژول base ، TODO: Step 1.1, Review variables در

فایل ForegroundOnlyLocationService.kt .

در این مرحله هیچ اقدامی لازم نیست. شما فقط باید بلوک کد زیر را به همراه نظرات مرور کنید تا کلاس‌ها و متغیرهای کلیدی را که برای دریافت به‌روزرسانی‌های مکان استفاده می‌کنید، درک کنید.

// TODO: Step 1.1, Review variables (no changes).
// FusedLocationProviderClient - Main class for receiving location updates.
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient

// LocationRequest - Requirements for the location updates, i.e., how often you
// should receive updates, the priority, etc.
private lateinit var locationRequest: LocationRequest

// LocationCallback - Called when FusedLocationProviderClient has a new Location.
private lateinit var locationCallback: LocationCallback

// Used only for local storage of the last known location. Usually, this would be saved to your
// database, but because this is a simplified sample without a full database, we only need the
// last location to create a Notification if the user navigates away from the app.
private var currentLocation: Location? = null

مقداردهی اولیه FusedLocationProviderClient را مرور کنید

در ماژول base ، TODO: Step 1.2, Review the FusedLocationProviderClient در فایل ForegroundOnlyLocationService.kt مرور کنید. کد شما باید چیزی شبیه به این باشد:

// TODO: Step 1.2, Review the FusedLocationProviderClient.
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)

همانطور که در نظرات قبلی ذکر شد، این کلاس اصلی برای دریافت به روز رسانی مکان است. متغیر قبلاً برای شما مقداردهی اولیه شده است، اما مهم است که کد را مرور کنید تا بفهمید چگونه مقداردهی اولیه شده است. بعداً برای درخواست به‌روزرسانی مکان، کدی را در اینجا اضافه می‌کنید.

LocationRequest را راه اندازی کنید

  1. در ماژول base ، TODO: Step 1.3, Create a LocationRequest در فایل ForegroundOnlyLocationService.kt ایجاد کنید.
  2. بعد از کامنت کد زیر را اضافه کنید.

کد راه‌اندازی LocationRequest کیفیت اضافی پارامترهای خدماتی را که برای درخواست شما نیاز دارید (فواصل زمانی، حداکثر زمان انتظار و اولویت) اضافه می‌کند.

// TODO: Step 1.3, Create a LocationRequest.
locationRequest = LocationRequest.create().apply {
   // Sets the desired interval for active location updates. This interval is inexact. You
   // may not receive updates at all if no location sources are available, or you may
   // receive them less frequently than requested. You may also receive updates more
   // frequently than requested if other applications are requesting location at a more
   // frequent interval.
   //
   // IMPORTANT NOTE: Apps running on Android 8.0 and higher devices (regardless of
   // targetSdkVersion) may receive updates less frequently than this interval when the app
   // is no longer in the foreground.
   interval = TimeUnit.SECONDS.toMillis(60)

   // Sets the fastest rate for active location updates. This interval is exact, and your
   // application will never receive updates more frequently than this value.
   fastestInterval = TimeUnit.SECONDS.toMillis(30)

   // Sets the maximum time when batched location updates are delivered. Updates may be
   // delivered sooner than this interval.
   maxWaitTime = TimeUnit.MINUTES.toMillis(2)

   priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
  1. نظرات را بخوانید تا بفهمید هر کدام چگونه کار می کنند.

موقعیت تماس Callback را راه اندازی کنید

  1. در ماژول base ، TODO: Step 1.4, Initialize the LocationCallback در فایل ForegroundOnlyLocationService.kt راه اندازی کنید.
  2. بعد از کامنت کد زیر را اضافه کنید.
// TODO: Step 1.4, Initialize the LocationCallback.
locationCallback = object : LocationCallback() {
    override fun onLocationResult(locationResult: LocationResult) {
        super.onLocationResult(locationResult)

        // Normally, you want to save a new location to a database. We are simplifying
        // things a bit and just saving it as a local variable, as we only need it again
        // if a Notification is created (when the user navigates away from app).
        currentLocation = locationResult.lastLocation

        // Notify our Activity that a new location was added. Again, if this was a
        // production app, the Activity would be listening for changes to a database
        // with new locations, but we are simplifying things a bit to focus on just
        // learning the location side of things.
        val intent = Intent(ACTION_FOREGROUND_ONLY_LOCATION_BROADCAST)
        intent.putExtra(EXTRA_LOCATION, currentLocation)
        LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)

        // Updates notification content if this service is running as a foreground
        // service.
        if (serviceRunningInForeground) {
            notificationManager.notify(
                NOTIFICATION_ID,
                generateNotification(currentLocation))
        }
    }
}

LocationCallback که در اینجا ایجاد می‌کنید همان تماسی است که FusedLocationProviderClient زمانی که به‌روزرسانی موقعیت مکانی جدید در دسترس باشد، آن را فراخوانی می‌کند.

در پاسخ به تماس خود، ابتدا آخرین مکان را با استفاده از یک شی LocationResult دریافت می کنید. پس از آن، با استفاده از یک پخش محلی (اگر فعال باشد) Activity خود را از مکان جدید مطلع می کنید یا اگر این سرویس به عنوان Service پیش زمینه در حال اجرا باشد، Notification را به روز می کنید.

  1. نظرات را بخوانید تا بفهمید هر قسمت چه کاری انجام می دهد.

اشتراک در تغییرات مکان

اکنون که همه چیز را مقداردهی اولیه کردید، باید به FusedLocationProviderClient اطلاع دهید که می‌خواهید به‌روزرسانی‌ها را دریافت کنید.

  1. در ماژول base ، Step 1.5, Subscribe to location changes در فایل ForegroundOnlyLocationService.kt جستجو کنید.
  2. بعد از کامنت کد زیر را اضافه کنید.
// TODO: Step 1.5, Subscribe to location changes.
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())

فراخوانی requestLocationUpdates() به FusedLocationProviderClient اجازه می دهد بداند که می خواهید به روز رسانی های مکان را دریافت کنید.

احتمالاً LocationRequest و LocationCallback را که قبلاً تعریف کرده اید، تشخیص می دهید. آن‌ها به FusedLocationProviderClient اجازه می‌دهند تا پارامترهای کیفیت خدمات درخواست شما را بداند و هنگامی که به‌روزرسانی می‌شود چه چیزی باید فراخوانی کند. در نهایت، شی Looper رشته ای را برای بازگشت به تماس مشخص می کند.

همچنین ممکن است متوجه شوید که این کد در دستور try/catch قرار دارد. این روش به چنین بلوکی نیاز دارد زیرا یک SecurityException زمانی رخ می دهد که برنامه شما مجوز دسترسی به اطلاعات مکان را نداشته باشد.

لغو اشتراک از تغییرات مکان

وقتی برنامه دیگر نیازی به دسترسی به اطلاعات مکان ندارد، لغو اشتراک از به‌روزرسانی‌های موقعیت مکانی بسیار مهم است.

  1. در ماژول base ، TODO: Step 1.6, Unsubscribe to location changes در فایل ForegroundOnlyLocationService.kt .
  2. بعد از کامنت کد زیر را اضافه کنید.
// TODO: Step 1.6, Unsubscribe to location changes.
val removeTask = fusedLocationProviderClient.removeLocationUpdates(locationCallback)
removeTask.addOnCompleteListener { task ->
   if (task.isSuccessful) {
       Log.d(TAG, "Location Callback removed.")
       stopSelf()
   } else {
       Log.d(TAG, "Failed to remove Location Callback.")
   }
}

روش removeLocationUpdates() وظیفه ای را تنظیم می کند تا FusedLocationProviderClient بداند که دیگر نمی خواهید به روز رسانی های مکان را برای LocationCallback خود دریافت کنید. addOnCompleteListener() فراخوانی را برای تکمیل می دهد و Task را اجرا می کند.

مانند مرحله قبل، ممکن است متوجه شده باشید که این کد در یک دستور try/catch قرار دارد. این روش به چنین بلوکی نیاز دارد زیرا یک SecurityException زمانی رخ می دهد که برنامه شما مجوز دسترسی به اطلاعات مکان را نداشته باشد.

ممکن است تعجب کنید که چه زمانی متدهایی که حاوی کد اشتراک/لغو اشتراک هستند فراخوانی می شوند. هنگامی که کاربر روی دکمه ضربه می زند، آنها در کلاس اصلی فعال می شوند. اگر می خواهید آن را ببینید، به کلاس MainActivity.kt نگاهی بیندازید.

برنامه را اجرا کنید

برنامه خود را از Android Studio اجرا کنید و دکمه مکان را امتحان کنید.

شما باید اطلاعات مکان را در صفحه خروجی ببینید. این یک برنامه کاملا کاربردی برای اندروید 9 است.

2ae45c4e297e3681.png

d66089bfb532e993.png

5. از اندروید 10 پشتیبانی کنید

در این بخش، پشتیبانی از اندروید 10 را اضافه می کنید.

برنامه شما قبلاً در تغییرات مکان مشترک است، بنابراین کار زیادی برای انجام دادن وجود ندارد.

در واقع، تنها کاری که باید انجام دهید این است که مشخص کنید از سرویس پیش زمینه شما برای اهداف مکان یابی استفاده می شود.

هدف SDK 29

  1. در ماژول base ، TODO: Step 2.1, Target Android 10 and then Android 11. در فایل build.gradle جستجو کنید.
  2. این تغییرات را انجام دهید:
  3. targetSdkVersion را روی 29 تنظیم کنید.

کد شما باید چیزی شبیه به این باشد:

android {
   // TODO: Step 2.1, Target Android 10 and then Android 11.
   compileSdkVersion 29
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion 29
       versionCode 1
       versionName "1.0"
   }
...
}

پس از انجام این کار، از شما خواسته می شود که پروژه خود را همگام کنید. اکنون روی همگام سازی کلیک کنید.

153f70847e0ec320.png

پس از آن، برنامه شما تقریباً برای اندروید 10 آماده است.

نوع سرویس پیش زمینه را اضافه کنید

در اندروید 10، در صورت نیاز به دسترسی به موقعیت مکانی حین استفاده، باید نوع سرویس پیش زمینه خود را وارد کنید. در مورد شما، از آن برای دریافت اطلاعات مکان استفاده می شود.

در ماژول base ، TODO: 2.2, Add foreground service type در AndroidManifest.xml اضافه کنید و کد زیر را به عنصر <service> اضافه کنید:

android:foregroundServiceType="location"

کد شما باید چیزی شبیه به این باشد:

<application>
   ...

   <!-- Foreground services in Android 10+ require type. -->
   <!-- TODO: 2.2, Add foreground service type. -->
   <service
       android:name="com.example.android.whileinuselocation.ForegroundOnlyLocationService"
       android:enabled="true"
       android:exported="false"
       android:foregroundServiceType="location" />
</application>

همین! برنامه شما با پیروی از بهترین روش‌ها برای مکان در Android، مکان Android 10 را برای «در حین استفاده» پشتیبانی می‌کند.

برنامه را اجرا کنید

برنامه خود را از Android Studio اجرا کنید و دکمه مکان را امتحان کنید.

همه چیز باید مانند قبل کار کند، اما اکنون روی اندروید 10 کار می کند. اگر قبلاً مجوزهای مکان ها را قبول نمی کردید، اکنون باید صفحه مجوز را ببینید!

6a1029175b467c77.png

c7c1d226e49a121.png

39a262b66a275f66.png

6. از اندروید 11 پشتیبانی کنید

در این بخش اندروید 11 را هدف قرار می دهید.

خبر عالی، شما نیازی به تغییر در هیچ فایلی به جز فایل build.gradle ندارید!

هدف SDK 11

  1. در ماژول base ، TODO: Step 2.1, Target SDK در فایل build.gradle جستجو کنید.
  2. این تغییرات را انجام دهید:
  3. compileSdkVersion به 30
  4. targetSdkVersion تا 30

کد شما باید چیزی شبیه به این باشد:

android {
   TODO: Step 2.1, Target Android 10 and then Android 11.
   compileSdkVersion 30
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion 30
       versionCode 1
       versionName "1.0"
   }
...
}

پس از انجام این کار، از شما خواسته می شود که پروژه خود را همگام کنید. اکنون روی همگام سازی کلیک کنید.

153f70847e0ec320.png

پس از آن، برنامه شما برای اندروید 11 آماده است!

برنامه را اجرا کنید

برنامه خود را از Android Studio اجرا کنید و روی دکمه کلیک کنید.

همه چیز باید مانند قبل کار کند، اما اکنون روی اندروید 11 کار می کند. اگر قبلاً مجوزهای مکان ها را قبول نمی کردید، اکنون باید صفحه مجوز را ببینید!

73d8cc88c5877c25.png

cc98fac6e089bc4.png

7. استراتژی های مکان برای اندروید

با بررسی و درخواست مجوزهای مکان به روش‌های نشان‌داده‌شده در این کد، برنامه شما می‌تواند با موفقیت سطح دسترسی خود را در مورد مکان دستگاه پیگیری کند.

این صفحه چند بهترین روش کلیدی مربوط به مجوزهای مکان را فهرست می کند. برای اطلاعات بیشتر درباره نحوه ایمن نگه داشتن داده‌های کاربران، به بهترین شیوه‌های مجوزهای برنامه مراجعه کنید.

فقط مجوزهای مورد نیاز خود را بخواهید

فقط در صورت نیاز مجوز بخواهید. به عنوان مثال:

  • هنگام راه‌اندازی برنامه، مجوز مکان را درخواست نکنید، مگر اینکه کاملاً ضروری باشد.
  • اگر برنامه شما Android 10 یا بالاتر را هدف قرار می دهد و یک سرویس پیش زمینه دارید، یک foregroundServiceType از "location" در مانیفست اعلام کنید.
  • مجوزهای مکان پس‌زمینه را درخواست نکنید، مگر اینکه یک مورد استفاده معتبر همانطور که در دسترسی ایمن‌تر و شفاف‌تر به مکان کاربر توضیح داده شده است داشته باشید.

در صورت عدم صدور مجوز، از تخریب برازنده حمایت کنید

برای حفظ یک تجربه کاربری خوب، برنامه خود را طوری طراحی کنید که بتواند شرایط زیر را به خوبی مدیریت کند:

  • برنامه شما به اطلاعات مکان دسترسی ندارد.
  • برنامه شما هنگام اجرا در پس‌زمینه به اطلاعات مکان دسترسی ندارد.

8. تبریک می گویم

شما یاد گرفتید که چگونه به‌روزرسانی‌های موقعیت مکانی را در Android دریافت کنید و بهترین روش‌ها را در ذهن داشته باشید!

بیشتر بدانید