اندروید 12 کنترل بیشتری برای دسترسی به موقعیت مکانی دارد. در اینجا قصد دارم در مورد تغییرات حریم خصوصی در اندروید 12 صحبت کنم که ممکن است روی برنامه شما تاثیر بگذارد. تغییرات موقعیت مکانی برای برنامههایی است که نسخه اندروید هدف را اندروید 12 یا بالاتر انتخاب کردهاند. اگر در برنامه شما این کار انجام شده است، باید از تغییرات مربوط به موقعیت مکانی آگاه باشید.
Approximate location(مکان تقریبی)
در اندروید 12 کاربران با انتخاب مکان تقریبی، انتخاب واضحی در مورد دقت مکان ارائه شده به برنامه دارند. هنگامی که برنامهای اندروید 12 را به عنوان اندروید هدف قرار میدهد، کاربران میتوانند از برنامه درخواست کنند که فقط اطلاعات تقریبی مکان را بازیابی کند، حتی اگر برنامه درخواست ACCESS_FINELOCATION را نیز داده باشد.
شکل زیر دیالوگی را نشان میدهد که هنگامی که برنامه شما اندروید 12 را به عنوان اندروید هدف قرار داده است و درخواست ACCESS_COARSE_LOCATION را میکند، نشان داده میشود. برای احترام به حریم خصوصی کاربر توصیه میشود فقط ACCESS_COARSE_LOCATION را درخواست کنید. بیشتر موارد را حتی با دسترسی به مکان تقریبی نیز میتوانید براورده کنید.
اگر برنامه شما اندروید 12 را به عنوان اندروید هدف قرار داده است و ACCESS_FINE_LOCATION درخواست داده است، باید ACESS_COARSE_LOCATION را نیز درخواست کنید. شما باید هر دو درخواست را در یک درخواست زمان اجرا قرار دهید. اگر فقط میخواید ACCESS_FINE_LOCATION را درخواست کنید، سیستم درخواست را نادیده میگیرد و پیام خطای زیر را در logcat ثبت میکند: ACCESS_FINE_LOCATION must requested with ACCESS_COARSE_LOCATION.
وقتی برنامه شما هم ACCESS_FINE_LOCATION و هم ACCESS_COARSE_LOCATION را درخواست میکند، دیالوگ مجوزهای سیستم شامل گزینههای جدید زیر برای کاربر است:
- Precise(دقیق): دقت مکانی که مجوز ACCESS_FINE_LOCATION ارائه میدهد را فراهم میکند.
- Approximate(تقریبی): دقت مکانی که مجوز ACCESS_COARSE_LOCATION ارائه میدهد را فراهم میکند.
شکل زیر نشان میدهد که دیالوگ حاوی نشانه بصری برای هر دو گزینه جدید است، تا به کاربر در انتخاب کمک کند. پس از اینکه کاربر در مورد دقت مکان تصمیم گرفت، برای انتخاب مدت زمان اعطای مجوز، روی یکی از سه دکمه ضربه میزند. این دکمهها همان دکمههایی هستند که در دیالوگ مجوز مکان در دستگاههای دارای اندروید 11(api 30) ظاهر میشود.
نکته: در اندروید 12 کاربران میتوانند بدون در نظر گرفتن نسخه sdk مورد نظر آن برنامه به تنظیمات سیستم مراجعه کرده و دقت مکان دلخواه را برای هر برنامه تنظیم کنند. این حتی وقتی برنامه شما روی دستگاهی با اندروید نسخه 11 به پایین نصب شده باشد، درست است و سپس به اندروید 12 ارتقا مییابد. اگر کاربر دسترسی به موقعیت مکانی برنامه شما را از طریق دیالوگ مجوز و یا از طریق تنظیمات سیستم از دقیق به تقریبی کاهش دهد، سیستم برنامه شما را مجدد راه اندازی میکند. به همین دلایل، مهم است که بهترین روش درخواست مجوز زمان اجرا را دنبال کنید.
جدول زیر ، مجوزهایی را که سیستم به برنامه شما میدهد، براساس گزینههایی که کاربر در دیالوگ مجوز زمان اجرا انتخاب میکند نشان میدهد:
تاثیر انتخاب کاربر در مجوز مکان پسزمینه
اگر سیستم مجوز ACCESS_BACKGROUND_LOCATION را به برنامه شما بدهد، انتخابهای کاربر در دیالوگ مجوزهای مکان برای مکان پسزمینه نیز اعمال میشود. برای مثال، اگر کاربر به برنامه شما مجوز ACCESS_BACKGROUND_LOCATION را بدهد اما فقط دسترسی تقریبی موقعیت مکانی را در پیش زمینه بدهد، برنامه شما در پس زمینه نیز دسترسی تقریبی موقعیت را دارد.
ارتقا به موقعیت مکانی دقیق
اگر در حال حاضر برنامه شما به مکان دقیق با استفاده از ACCESS_FINE_LOCATION متکی باشد، موقعیت مکانی تقریبی ممکن است رو برنامه شما تاثیر بگذارد.
قبل از اینکه از کاربر بخواهید دسترسی برنامه شما را به مکان دقیق ارتقا دهد، بررسی کنید که آیا برنامه شما به این سطح از دقت نیاز دارد. اگر برنامه شما نیاز به جفت سازی دستگاه با دستگاههای اطراف از طریق بلوتوث یا wifi دارد به جای درخواست ACCESS_FINE_LOCATION از companion device pairing یا مجوز جدید بلوتوث استفاده کنید.
برای درخواست از کاربر برای ارتقا دسترسی موقعیت مکانی از تقریبی به دقیق، موارد زیر را انجام دهید:
- در صورت لزوم، توضیح دهید که چرا برنامه شما به مجوز نیاز دارد.
- دوباره مجوزهای ACCESS_FINE_LOCATION و ACCESS_COARSE_LOCATION را با هم درخواست کنید. زیرا کاربر قبلا مجوز موقعیت تقریبی را به برنامه شما داده است.
کنترل کاهش دسترسی موقعیت مکان تقریبی از تنظیمات سیستم
برای بررسی نحوه کنترل درخواست کاربر برای تغییر دسترسی موقعیت مکانی از دقیق به تقریبی توسط برنامه در تنظیمات سیستم موارد زیر را انجام دهید:
- ACCESS_FINE_LOCATION و ACCESS_COARSE_LOCATION را با هم درخواست کنید
- در دیالوگی که ظاهر میشود Precise(دقیق) را انتخاب کنید و در قسمت پایین While using the app یا Only this time را انتخاب کنید
- در تنظیمات سیستم به صفحه مجوزهای برنامه خود بروید
- در صفحه مجوز مکان، مکان دقیق را خاموش کنید
- با کم کردن سطح دسترسی، سیستم برنامه شما را مجدد راه اندازی میکند
- بررسی کنید که آیا برنامه شما همچنان مطابق انتظار کار میکند، حتی اگر برنامه فقط دسترسی تقریبی موقعیت مکانی را داشته باشد
کنترل افزایش دسترسی موقعیت مکان دقیق از تنظیمات سیستم
برای بررسی نحوه کنترل درخواست کاربر برای تغییر دسترسی موقعیت مکانی از تقریبی به دقیق توسط برنامه در تنظیمات سیستم موارد زیر را انجام دهید:
- ACCESS_FINE_LOCATION و ACCESS_COARSE_LOCATION را با هم درخواست کنید
- در دیالوگی که ظاهر میشود Approximate(تقریبی) را انتخاب کنید و در قسمت پایین While using the app یا Only this time را انتخاب کنید
- در تنظیمات سیستم به صفحه مجوزهای برنامه خود بروید
- همانطور که در شکل بالا نشان داده شده است، مجوز موقعیت مکانی را روشن کنید
- از آنجا که این تغییر ارتقا مجوز است، سیستم برنامه را مجدد راه اندازی نمیکند
- بررسی کنید که آیا برنامه موقعیت مکانی دقیقتری را دریافت میکند یا خیر
بررسی نیازمندیهای موقعیت مکانی در وابستگیهای sdk برنامه
بررسی کنید که آیا برنامه شما از sdk استفاده میکند که به مجوز ACCESS_FINE_LOCATION نیاز داشته باشد. برای آشنایی با رفتارهای وابستگی sdk میتوانید این مقاله را بررسی کنید.
بررسی کنید که سیستم کدام مجوزها را به برنامه شما داده است
برای تعیین اینکه سیستم کدام یک از مجوز را به برنامه شما داده است، مقدار برگشتی درخواست برگشتی درخواست مجوزهای خود را بررسی کنید. میتوانید از کتابخانههای jetpack همانند کد زیر استفاده کنید، یا میتوانید از کتابخانههای پلتفرم استفاده کنید، که خودتان کد درخواست مجوز را مدیریت کنید.
val locationPermissionRequest = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
when {
permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
// Precise location access granted.
}
permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
// Only approximate location access granted.
}
else -> {
// No location access granted.
}
}
}
// …
// Before you perform the actual permission request, check whether your app
// already has the permissions, and whether your app needs to show a permission
// rationale dialog. For more details, see Request permissions.
locationPermissionRequest.launch(arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION))
در حال حاضر این همه موارد مربوط به تغییرات حریم خصوصی برای موقعیت مکانی است.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید