যখন আপনার অ্যাপের একটি বৈশিষ্ট্যের লোকেশন অ্যাক্সেসের প্রয়োজন হয়, তখন অনুমতির অনুরোধ করার আগে ব্যবহারকারী বৈশিষ্ট্যটির সাথে ইন্টারঅ্যাক্ট না করা পর্যন্ত অপেক্ষা করুন। এই ওয়ার্কফ্লো প্রেক্ষাপটে রানটাইম অনুমতি চাওয়ার সর্বোত্তম অভ্যাস অনুসরণ করে, যেমন নির্দেশিকায় বর্ণনা করা হয়েছে যেটি ব্যাখ্যা করে কিভাবে অ্যাপের অনুমতির অনুরোধ করতে হয় ।
চিত্র 1 এই প্রক্রিয়াটি কীভাবে সম্পাদন করতে হয় তার একটি উদাহরণ দেখায়। অ্যাপটিতে একটি "শেয়ার লোকেশন" বৈশিষ্ট্য রয়েছে যার জন্য ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস প্রয়োজন। অ্যাপটি লোকেশনের অনুমতির অনুরোধ করে না, যতক্ষণ না ব্যবহারকারী লোকেশন শেয়ার বোতামটি নির্বাচন করে।
ব্যবহারকারী শুধুমাত্র আনুমানিক অবস্থান মঞ্জুর করতে পারেন
Android 12 (API লেভেল 31) বা তার উপরে, ব্যবহারকারীরা অনুরোধ করতে পারে যে আপনার অ্যাপটি শুধুমাত্র আনুমানিক অবস্থানের তথ্য পুনরুদ্ধার করবে, এমনকি যখন আপনার অ্যাপ ACCESS_FINE_LOCATION
রানটাইম অনুমতির অনুরোধ করে।
এই সম্ভাব্য ব্যবহারকারীর আচরণ পরিচালনা করতে, নিজে থেকে ACCESS_FINE_LOCATION
অনুমতির অনুরোধ করবেন না৷ পরিবর্তে, একটি একক রানটাইম অনুরোধে ACCESS_FINE_LOCATION
অনুমতি এবং ACCESS_COARSE_LOCATION
উভয় অনুমতির জন্য অনুরোধ করুন৷ আপনি যদি শুধুমাত্র ACCESS_FINE_LOCATION
জন্য অনুরোধ করার চেষ্টা করেন, তাহলে সিস্টেম Android 12-এর কিছু রিলিজের অনুরোধ উপেক্ষা করে। যদি আপনার অ্যাপটি Android 12 বা উচ্চতরকে লক্ষ্য করে, তাহলে সিস্টেম Logcat- এ নিম্নলিখিত ত্রুটি বার্তাটি লগ করবে:
ACCESS_FINE_LOCATION must be requested with ACCESS_COARSE_LOCATION.
যখন আপনার অ্যাপ ACCESS_FINE_LOCATION
এবং ACCESS_COARSE_LOCATION
উভয়ের জন্য অনুরোধ করে, তখন সিস্টেম অনুমতি ডায়ালগে ব্যবহারকারীর জন্য নিম্নলিখিত বিকল্পগুলি অন্তর্ভুক্ত থাকে:
- সুনির্দিষ্ট : আপনার অ্যাপকে সুনির্দিষ্ট অবস্থানের তথ্য পেতে অনুমতি দেয়।
- আনুমানিক : আপনার অ্যাপকে শুধুমাত্র আনুমানিক অবস্থানের তথ্য পেতে অনুমতি দেয়।
চিত্র 3 দেখায় যে ডায়ালগটিতে উভয় বিকল্পের জন্য একটি ভিজ্যুয়াল কিউ রয়েছে, ব্যবহারকারীকে চয়ন করতে সহায়তা করার জন্য। ব্যবহারকারী একটি অবস্থান নির্ভুলতার বিষয়ে সিদ্ধান্ত নেওয়ার পরে, তারা অনুমতি প্রদানের সময়কাল নির্বাচন করতে তিনটি বোতামের একটিতে ট্যাপ করে।
Android 12 এবং উচ্চতর সংস্করণে, ব্যবহারকারীরা সেই অ্যাপের টার্গেট SDK সংস্করণ নির্বিশেষে যেকোনো অ্যাপের জন্য পছন্দের অবস্থান নির্ভুলতা সেট করতে সিস্টেম সেটিংসে নেভিগেট করতে পারেন। এটি তখনও সত্য যখন আপনার অ্যাপ Android 11 বা তার নিচের সংস্করণে চলমান ডিভাইসে ইনস্টল করা থাকে এবং তারপর ব্যবহারকারী ডিভাইসটিকে Android 12 বা উচ্চতর সংস্করণে আপগ্রেড করে।
ব্যবহারকারীর পছন্দ অনুমতি অনুদান প্রভাবিত করে
নিম্নলিখিত সারণীটি অনুমতিগুলি দেখায় যা সিস্টেম আপনার অ্যাপকে অনুমোদন করে, ব্যবহারকারীরা অনুমতি রানটাইম ডায়ালগে যে বিকল্পগুলি বেছে নেয় তার উপর ভিত্তি করে:
সুনির্দিষ্ট | আনুমানিক | |
---|---|---|
অ্যাপটি ব্যবহার করার সময় | ACCESS_FINE_LOCATION এবংACCESS_COARSE_LOCATION | ACCESS_COARSE_LOCATION |
শুধু এই সময় | ACCESS_FINE_LOCATION এবংACCESS_COARSE_LOCATION | ACCESS_COARSE_LOCATION |
অস্বীকার করুন | কোন অবস্থান অনুমতি নেই | কোন অবস্থান অনুমতি নেই |
সিস্টেম আপনার অ্যাপে কোন অনুমতি দিয়েছে তা নির্ধারণ করতে, আপনার অনুমতির অনুরোধের রিটার্ন মান পরীক্ষা করুন। আপনি নিচের মতো কোডে জেটপ্যাক লাইব্রেরি ব্যবহার করতে পারেন, অথবা আপনি প্ল্যাটফর্ম লাইব্রেরি ব্যবহার করতে পারেন, যেখানে আপনি অনুমতি অনুরোধ কোড নিজেই পরিচালনা করেন ।
কোটলিন
@RequiresApi(Build.VERSION_CODES.N) fun requestPermissions() { 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: // https://developer.android.com/training/permissions/requesting#request-permission locationPermissionRequest.launch( arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION ) ) }
জাভা
private void requestPermissions() { ActivityResultLauncher<String[]> locationPermissionRequest = registerForActivityResult(new ActivityResultContracts .RequestMultiplePermissions(), result -> { Boolean fineLocationGranted = null; Boolean coarseLocationGranted = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { fineLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_FINE_LOCATION, false); coarseLocationGranted = result.getOrDefault( Manifest.permission.ACCESS_COARSE_LOCATION,false); } if (fineLocationGranted != null && fineLocationGranted) { // Precise location access granted. } else if (coarseLocationGranted != null && coarseLocationGranted) { // 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(new String[] { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION }); }
সুনির্দিষ্ট অবস্থানে আপগ্রেড করার অনুরোধ করুন
আপনি ব্যবহারকারীকে আপনার অ্যাপের অ্যাক্সেস আনুমানিক অবস্থান থেকে সুনির্দিষ্ট অবস্থানে আপগ্রেড করতে বলতে পারেন। আপনি ব্যবহারকারীকে সুনির্দিষ্ট অবস্থানে আপনার অ্যাপের অ্যাক্সেস আপগ্রেড করতে বলার আগে, তবে, আপনার অ্যাপের ব্যবহারের ক্ষেত্রে এই স্তরের নির্ভুলতা প্রয়োজন কিনা তা বিবেচনা করুন। যদি আপনার অ্যাপকে ব্লুটুথ বা ওয়াই-ফাই এর মাধ্যমে কাছাকাছি ডিভাইসের সাথে একটি ডিভাইস যুক্ত করতে হয়, তাহলে ACCESS_FINE_LOCATION
অনুমতির অনুরোধ করার পরিবর্তে সঙ্গী ডিভাইস পেয়ারিং বা ব্লুটুথ অনুমতিগুলি ব্যবহার করার কথা বিবেচনা করুন৷
ব্যবহারকারী আপনার অ্যাপের অবস্থান অ্যাক্সেসকে আনুমানিক থেকে সুনির্দিষ্ট পর্যন্ত আপগ্রেড করার অনুরোধ করতে, নিম্নলিখিতগুলি করুন:
- প্রয়োজনে, কেন আপনার অ্যাপটির অনুমতি প্রয়োজন তা ব্যাখ্যা করুন ।
- আবার একসাথে
ACCESS_FINE_LOCATION
এবংACCESS_COARSE_LOCATION
অনুমতির জন্য অনুরোধ করুন৷ যেহেতু ব্যবহারকারী ইতিমধ্যেই সিস্টেমটিকে আপনার অ্যাপে আনুমানিক অবস্থান দেওয়ার অনুমতি দিয়েছে, তাই চিত্র 4 এবং চিত্র 5-এ দেখানো হিসাবে এইবার সিস্টেম ডায়ালগ আলাদা:
প্রাথমিকভাবে শুধুমাত্র অগ্রভাগের অবস্থানের জন্য অনুরোধ করুন
এমনকি যদি আপনার অ্যাপের বেশ কয়েকটি বৈশিষ্ট্যের লোকেশন অ্যাক্সেসের প্রয়োজন হয়, তবে সম্ভবত তাদের মধ্যে কয়েকটির জন্য ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস প্রয়োজন। অতএব, এটি সুপারিশ করা হয় যে আপনার অ্যাপটি অবস্থানের অনুমতিগুলির জন্য ক্রমবর্ধমান অনুরোধগুলি সম্পাদন করে, ফোরগ্রাউন্ড অবস্থান অ্যাক্সেস এবং তারপরে ব্যাকগ্রাউন্ড অবস্থান অ্যাক্সেসের জন্য জিজ্ঞাসা করে। ক্রমবর্ধমান অনুরোধগুলি সম্পাদন করে, আপনি ব্যবহারকারীদের আরও নিয়ন্ত্রণ এবং স্বচ্ছতা দেন কারণ তারা আরও ভালভাবে বুঝতে পারে যে আপনার অ্যাপের কোন বৈশিষ্ট্যগুলি ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেসের প্রয়োজন।
চিত্র 6 একটি অ্যাপের উদাহরণ দেখায় যা ক্রমবর্ধমান অনুরোধগুলি পরিচালনা করার জন্য ডিজাইন করা হয়েছে৷ "বর্তমান অবস্থান দেখান" এবং "আশেপাশের স্থানগুলি সুপারিশ করুন" উভয় বৈশিষ্ট্যের জন্যই ফোরগ্রাউন্ড অবস্থান অ্যাক্সেস প্রয়োজন৷ তবে শুধুমাত্র "আশেপাশের স্থানগুলি সুপারিশ করুন" বৈশিষ্ট্যটির জন্য পটভূমি অবস্থান অ্যাক্সেসের প্রয়োজন৷
ক্রমবর্ধমান অনুরোধগুলি সম্পাদন করার প্রক্রিয়াটি নিম্নরূপ:
প্রথমে, আপনার অ্যাপটিকে এমন বৈশিষ্ট্যগুলির জন্য ব্যবহারকারীদের গাইড করা উচিত যেগুলির জন্য ফোরগ্রাউন্ড অবস্থান অ্যাক্সেসের প্রয়োজন, যেমন চিত্র 1-এ "স্থান ভাগ করুন" বৈশিষ্ট্য বা চিত্র 2-এ "বর্তমান অবস্থান দেখান" বৈশিষ্ট্য৷
আপনার অ্যাপের ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস না হওয়া পর্যন্ত আপনি ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেসের প্রয়োজন এমন বৈশিষ্ট্যগুলিতে ব্যবহারকারীর অ্যাক্সেস অক্ষম করার পরামর্শ দেওয়া হচ্ছে।
পরবর্তী সময়ে, যখন ব্যবহারকারী ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেসের প্রয়োজন এমন বৈশিষ্ট্যগুলি অন্বেষণ করে, আপনি পটভূমি অবস্থান অ্যাক্সেসের অনুরোধ করতে পারেন।
অতিরিক্ত সম্পদ
অ্যান্ড্রয়েডে অবস্থানের অনুমতি সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত উপকরণগুলি দেখুন:
কোডল্যাব
ভিডিও
নমুনা
- অবস্থানের অনুমতির ব্যবহার প্রদর্শনের জন্য নমুনা অ্যাপ ।