রানটাইমে লোকেশন অ্যাক্সেস করার অনুরোধ করা

রানটাইমে লোকেশন অ্যাক্সেসের অনুরোধ করার আগে, লোকেশন অ্যাক্সেসের বিকল্প ও সেরা পদ্ধতি এবং আপনার অনুমতির অনুরোধ কমানোর বিষয়ে নির্দেশিকা পর্যালোচনা করুন। কোন অনুমতির জন্য অনুরোধ করবেন এবং আপনার ব্যবহারের ক্ষেত্রে লোকেশন বোতাম আরও ভালো বিকল্প কিনা, তা সিদ্ধান্ত নিতে এইসব রিসোর্স আপনাকে সাহায্য করে।

লোকেশন সংক্রান্ত অনুমতি অ্যাক্সেস করার নির্দেশিকা

আপনার অ্যাপে কীভাবে লোকেশন অ্যাক্সেস প্রয়োগ করবেন সেই বিষয়ে সিদ্ধান্ত নেওয়ার সময় অনুসরণ করার জন্য কিছু সাধারণ নিয়ম।

প্রসঙ্গ অনুযায়ী লোকেশন অ্যাক্সেস করা

আপনার অ্যাপের কোনও ফিচারের লোকেশন অ্যাক্সেস করার প্রয়োজন হলে, অনুমতি চেয়ে পাঠানোর আগে ব্যবহারকারী ফিচারটির সাথে ইন্টার‍্যাক্ট করা পর্যন্ত আপনাকে অপেক্ষা করতে হবে। এটি ইন-কন্টেক্সটে রানটাইম অনুমতির জন্য অনুরোধ করার পেশাদার পদ্ধতি অনুসরণ করে, যেমন অ্যাপের অনুমতি অনুরোধ করার পদ্ধতি ব্যাখ্যা করে এমন গাইডে বর্ণনা করা হয়েছে।

এই প্রসেস কীভাবে পারফর্ম করতে হয় তা ১ নম্বর ছবিতে দেখানো হয়েছে। অ্যাপে একটি "লোকেশন শেয়ার করুন" ফিচার আছে যার জন্য ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস প্রয়োজন। ব্যবহারকারী লোকেশন শেয়ার করুন বোতামটি বেছে না নেওয়া পর্যন্ত, অ্যাপটি লোকেশন সংক্রান্ত অনুমতির অনুরোধ করে না।

ব্যবহারকারী 'লোকেশন শেয়ার করুন' বোতাম বেছে নেওয়ার পরে, সিস্টেমের লোকেশন সংক্রান্ত অনুমতির ডায়ালগ দেখা যায়
ছবি ১. লোকেশন শেয়ারিং ফিচার যার জন্য ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস প্রয়োজন। ব্যবহারকারী শুধুমাত্র অ্যাপ ব্যবহার করার সময় অনুমতি দিন বিকল্প বেছে নিলে ফিচারটি চালু হয়ে যায়।

ব্যবহারকারী শুধুমাত্র আনুমানিক লোকেশন অ্যাক্সেস করার অনুমতি দিতে পারবেন

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, দুটিই চাইলে, সিস্টেমের অনুমতির ডায়ালগে ব্যবহারকারীর জন্য নিম্নলিখিত বিকল্পগুলি থাকে:

  • সুনির্দিষ্ট: আপনার অ্যাপকে সুনির্দিষ্ট লোকেশন সংক্রান্ত তথ্য পেতে দেয়।
  • আনুমানিক: আপনার অ্যাপকে শুধুমাত্র আনুমানিক লোকেশন সংক্রান্ত তথ্য পেতে দেয়।

ছবি ৩ থেকে দেখা যায় যে ডায়ালগে দুটি বিকল্পের জন্যই ভিজ্যুয়াল কিউ রয়েছে, যা ব্যবহারকারীকে বেছে নিতে সাহায্য করে। ব্যবহারকারী লোকেশন অ্যাকুরেসি সম্পর্কে সিদ্ধান্ত নেওয়ার পরে, অনুমতি দেওয়ার সময়সীমা বেছে নিতে তিনটি বোতামের মধ্যে একটিতে ট্যাপ করেন।

Android 12 ও এর পরবর্তী যেকোনও ভার্সনে, ব্যবহারকারীরা সিস্টেম সেটিংস থেকে যেকোনও অ্যাপের জন্য পছন্দসই লোকেশন অ্যাকুরেসি সেট করতে পারবেন, সেই অ্যাপের টার্গেট SDK ভার্সন যাই হোক না কেন। এমনকি আপনার অ্যাপ Android 11 বা তার আগের যেকোনও ভার্সনে চলে এমন ডিভাইসে ইনস্টল করা থাকলেও এটি সত্যি এবং তারপরে ব্যবহারকারী ডিভাইসটি Android 12 বা তার পরের যেকোনও ভার্সনে আপগ্রেড করলেও এটি সত্যি।

ডায়লগে শুধুমাত্র আনুমানিক লোকেশন সম্পর্কে বলা হয়েছে এবং
         এতে ৩টি বোতাম আছে, একটির উপরে আরেকটি
ছবি ২. সিস্টেমের অনুমতির ডায়ালগ যা তখন দেখা যায় যখন আপনার অ্যাপ ACCESS_COARSE_LOCATION শুধুমাত্র অনুরোধ করে।
ডায়ালগে বিকল্পের ২টি সেট আছে, একটির উপরে অন্যটি
ছবি ৩. সিস্টেমের অনুমতির ডায়ালগ যা তখন দেখা যায় যখন আপনার অ্যাপ একটি রানটাইম অনুরোধে ACCESS_FINE_LOCATION এবং ACCESS_COARSE_LOCATION দুটির জন্যই অনুরোধ করে।

ব্যবহারকারীর পছন্দ অনুমতি প্রদানকে প্রভাবিত করে

নিচের সারণীতে সেইসব অনুমতি দেখানো হয়েছে যা সিস্টেম আপনার অ্যাপকে দেয়। এটি নির্ভর করে অনুমতি রানটাইম ডায়লগে ব্যবহারকারীর বেছে নেওয়া বিকল্পের উপর:

সুনির্দিষ্ট নিকটবর্তী
অ্যাপ ব্যবহার করাকালীন ACCESS_FINE_LOCATION ও
ACCESS_COARSE_LOCATION
ACCESS_COARSE_LOCATION
শুধুমাত্র এই সময় ACCESS_FINE_LOCATION ও
ACCESS_COARSE_LOCATION
ACCESS_COARSE_LOCATION
অনুমতি দেবেন না লোকেশন অ্যাক্সেস করার অনুমতি নেই লোকেশন অ্যাক্সেস করার অনুমতি নেই

সিস্টেম আপনার অ্যাপকে কোন কোন অনুমতি দিয়েছে তা নির্ধারণ করতে, আপনার অনুমতির অনুরোধের রিটার্ন ভ্যালু চেক করুন। আপনি কোডে Jetpack লাইব্রেরি ব্যবহার করতে পারেন যা নিচে উল্লেখ করা লাইব্রেরির মতো অথবা আপনি প্ল্যাটফর্ম লাইব্রেরি ব্যবহার করতে পারেন, যেখানে আপনি অনুরোধ কোড সংক্রান্ত অনুমতি নিজেই ম্যানেজ করেন।

Kotlin

@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 অনুরোধ করার পরিবর্তে কম্প্যানিয়ন ডিভাইস পেয়ারিংবা ব্লুটুথ অনুমতি ব্যবহার করার কথা বিবেচনা করুন।

ব্যবহারকারীকে আপনার অ্যাপের লোকেশন অ্যাক্সেস আনুমানিক থেকে সুনির্দিষ্ট করার অনুরোধ জানাতে, নিম্নলিখিত কাজগুলি করুন:

  1. প্রয়োজন হলে, আপনার অ্যাপের কেন অনুমতি প্রয়োজন তা ব্যাখ্যা করুন।
  2. ACCESS_FINE_LOCATION ও ACCESS_COARSE_LOCATION অনুমতি একসাথে আবার অনুরোধ করুন। যেহেতু ব্যবহারকারী আগেই সিস্টেমকে আপনার অ্যাপকে আনুমানিক লোকেশন সংক্রান্ত অনুমতি দেওয়ার অনুমতি দিয়েছেন, তাই এইবার সিস্টেম ডায়ালগ আলাদা, যেমন ৪ ও ৫ নম্বর ছবিতে দেখানো হয়েছে:
ডায়ালগে 'সুনির্দিষ্ট লোকেশনে
         পরিবর্তন করুন', 'শুধুমাত্র এইবার' এবং 'অনুমতি দেবেন না' বিকল্পগুলি রয়েছে।
ছবি ৪. ব্যবহারকারী আগে আনুমানিক ও অ্যাপ ব্যবহার করার সময় (ছবি ৩-এর ডায়ালগ থেকে) বেছে নিয়েছেন।
ডায়ালগে 'শুধুমাত্র এইবার' এবং
         'অনুমতি দেবেন না' বিকল্প আছে।
ছবি ৫. ব্যবহারকারী আগে আনুমানিক ও শুধুমাত্র এই সময়ের জন্য বিকল্প বেছে নিয়েছেন (ছবি ৩-এর ডায়ালগ থেকে)।

প্রাথমিকভাবে শুধুমাত্র ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস করার অনুরোধ করা

আপনার অ্যাপের একাধিক ফিচারের লোকেশন অ্যাক্সেস করার প্রয়োজন হলেও, সম্ভবত সেগুলির মধ্যে কয়েকটিরই ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস করার প্রয়োজন। তাই, লোকেশন অনুমতির জন্য আপনার অ্যাপকে ইনক্রিমেন্টাল অনুরোধ করতে সাজেস্ট করা হয়, প্রথমে ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস এবং তারপরে ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস করার জন্য অনুরোধ করুন। ইনক্রিমেন্টাল অনুরোধ করার মাধ্যমে, আপনি ব্যবহারকারীদের আরও বেশি নিয়ন্ত্রণ ও স্বচ্ছতা দেন কারণ তারা আরও ভালোভাবে বুঝতে পারেন যে আপনার অ্যাপের কোন কোন ফিচারের ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস প্রয়োজন।

৬ নম্বর ছবিতে, ইনক্রিমেন্টাল অনুরোধ ম্যানেজ করার জন্য ডিজাইন করা একটি অ্যাপের উদাহরণ দেখানো হয়েছে। "বর্তমান লোকেশন দেখুন" এবং "আশেপাশের জায়গা সাজেস্ট করুন" দুটি ফিচারের জন্যই ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস প্রয়োজন। তবে, শুধুমাত্র "আশেপাশের জায়গা সাজেস্ট করুন" ফিচারের জন্য ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস করার প্রয়োজন হয়।

ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস চালু করার বোতামটি
    ব্যাকগ্রাউন্ড লোকেশন চালু করার বোতাম থেকে স্ক্রিনের অর্ধেক দৈর্ঘ্য দূরে
    অবস্থিত
ছবি ৬. দুটি ফিচারের ক্ষেত্রেই লোকেশন অ্যাক্সেস প্রয়োজন, তবে শুধুমাত্র "আশেপাশের ফিচার সাজেস্ট করা" ফিচারের ক্ষেত্রে ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস প্রয়োজন।

ইনক্রিমেন্টাল অনুরোধ করার প্রসেস নিচে দেওয়া হল:

  1. প্রথমে, আপনার অ্যাপ ব্যবহারকারীদের সেইসব ফিচারের ব্যাপারে গাইড করবে যেগুলির জন্য ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস প্রয়োজন, যেমন, ১ নম্বর ছবিতে দেখানো "লোকেশন শেয়ার করুন" ফিচার অথবা ২ নম্বর ছবিতে দেখানো "বর্তমান লোকেশন দেখুন" ফিচার।

    সাজেস্ট করা হয় যে আপনার অ্যাপের ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস না থাকা পর্যন্ত, ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস প্রয়োজন হয় এমন ফিচারে ব্যবহারকারীর অ্যাক্সেস বন্ধ করে দিন।

  2. পরে, ব্যবহারকারী যখন ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেস প্রয়োজন এমন ফিচার এক্সপ্লোর করেন, তখন আপনি ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেসের অনুরোধ করতে পারেন।

অতিরিক্ত রিসোর্স

Android-এ লোকেশন সংক্রান্ত অনুমতি সম্পর্কে আরও তথ্য পেতে, নিম্নলিখিত বিষয়গুলি দেখুন:

কোডল্যাবস

ভিডিও

নমুনা

  • লোকেশন সংক্রান্ত অনুমতি ব্যবহারের ডেমো দেখাতে Sample অ্যাপ।