রানটাইমে অবস্থান অ্যাক্সেস অনুরোধ

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

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

ব্যবহারকারী শেয়ার অবস্থান বাটন নির্বাচন করার পরে,     সিস্টেমের অবস্থান অনুমতি ডায়ালগ প্রদর্শিত হবে
চিত্র 1. অবস্থান ভাগ করে নেওয়ার বৈশিষ্ট্য যার জন্য ফোরগ্রাউন্ড অবস্থান অ্যাক্সেস প্রয়োজন৷ যদি ব্যবহারকারী শুধুমাত্র অ্যাপটি ব্যবহার করার সময় Allow নির্বাচন করেন তাহলে বৈশিষ্ট্যটি সক্ষম হয়।

ব্যবহারকারী শুধুমাত্র আনুমানিক অবস্থান মঞ্জুর করতে পারেন

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 বা উচ্চতর সংস্করণে আপগ্রেড করে।

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

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

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

সুনির্দিষ্ট আনুমানিক
অ্যাপটি ব্যবহার করার সময় 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 অনুমতির অনুরোধ করার পরিবর্তে সঙ্গী ডিভাইস পেয়ারিং বা ব্লুটুথ অনুমতিগুলি ব্যবহার করার কথা বিবেচনা করুন৷

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

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

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

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

চিত্র 6 একটি অ্যাপের উদাহরণ দেখায় যা ক্রমবর্ধমান অনুরোধগুলি পরিচালনা করার জন্য ডিজাইন করা হয়েছে৷ "বর্তমান অবস্থান দেখান" এবং "আশেপাশের স্থানগুলি সুপারিশ করুন" উভয় বৈশিষ্ট্যের জন্যই ফোরগ্রাউন্ড অবস্থান অ্যাক্সেস প্রয়োজন৷ তবে শুধুমাত্র "আশেপাশের স্থানগুলি সুপারিশ করুন" বৈশিষ্ট্যটির জন্য পটভূমি অবস্থান অ্যাক্সেসের প্রয়োজন৷

ফোরগ্রাউন্ড অবস্থান অ্যাক্সেস সক্ষম করে যে বোতাম হয়     ব্যাকগ্রাউন্ড সক্ষম করে এমন বোতাম থেকে অর্ধেক স্ক্রীন দৈর্ঘ্য দূরে অবস্থান করুন     অবস্থান
চিত্র 6. উভয় বৈশিষ্ট্যের জন্য অবস্থান অ্যাক্সেসের প্রয়োজন, কিন্তু শুধুমাত্র "আশেপাশের বৈশিষ্ট্যগুলি সুপারিশ করুন" বৈশিষ্ট্যটির জন্য ব্যাকগ্রাউন্ড অবস্থান অ্যাক্সেস প্রয়োজন৷

ক্রমবর্ধমান অনুরোধগুলি সম্পাদন করার প্রক্রিয়াটি নিম্নরূপ:

  1. প্রথমে, আপনার অ্যাপটিকে এমন বৈশিষ্ট্যগুলির জন্য ব্যবহারকারীদের গাইড করা উচিত যেগুলির জন্য ফোরগ্রাউন্ড অবস্থান অ্যাক্সেসের প্রয়োজন, যেমন চিত্র 1-এ "স্থান ভাগ করুন" বৈশিষ্ট্য বা চিত্র 2-এ "বর্তমান অবস্থান দেখান" বৈশিষ্ট্য৷

    আপনার অ্যাপের ফোরগ্রাউন্ড লোকেশন অ্যাক্সেস না হওয়া পর্যন্ত আপনি ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেসের প্রয়োজন এমন বৈশিষ্ট্যগুলিতে ব্যবহারকারীর অ্যাক্সেস অক্ষম করার পরামর্শ দেওয়া হচ্ছে।

  2. পরবর্তী সময়ে, যখন ব্যবহারকারী ব্যাকগ্রাউন্ড লোকেশন অ্যাক্সেসের প্রয়োজন এমন বৈশিষ্ট্যগুলি অন্বেষণ করে, আপনি পটভূমি অবস্থান অ্যাক্সেসের অনুরোধ করতে পারেন।

অতিরিক্ত সম্পদ

অ্যান্ড্রয়েডে অবস্থানের অনুমতি সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত উপকরণগুলি দেখুন:

কোডল্যাব

ভিডিও

নমুনা