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

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

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

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

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

অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) বা তার উচ্চতর সংস্করণে, ব্যবহারকারীরা আপনার অ্যাপটিকে শুধুমাত্র আনুমানিক অবস্থানের তথ্য পুনরুদ্ধার করার জন্য অনুরোধ করতে পারেন, এমনকি যখন আপনার অ্যাপটি 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 উভয়ের জন্য অনুরোধ করে, তখন সিস্টেম অনুমতি ডায়ালগে ব্যবহারকারীর জন্য নিম্নলিখিত বিকল্পগুলি অন্তর্ভুক্ত থাকে:

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

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

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

ডায়ালগটি শুধুমাত্র আনুমানিক অবস্থান নির্দেশ করে এবং এতে 3টি বোতাম রয়েছে, একটি অন্যটির উপরে
চিত্র ২। আপনার অ্যাপ যখন শুধুমাত্র 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 লাইব্রেরি ব্যবহার করতে পারেন, অথবা আপনি প্ল্যাটফর্ম লাইব্রেরি ব্যবহার করতে পারেন, যেখানে আপনি নিজেই অনুমতি অনুরোধ কোড পরিচালনা করেন

কোটলিন

@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 এ দেখানো হয়েছে:
ডায়ালগটিতে 'সুনির্দিষ্ট অবস্থানে পরিবর্তন করুন', 'শুধুমাত্র এইবার' এবং 'অস্বীকার করুন' বিকল্পগুলি রয়েছে।
চিত্র ৪। ব্যবহারকারী পূর্বে অ্যাপটি ব্যবহার করার সময় ( চিত্র ৩ এর সংলাপে) "আনুমানিক" এবং "ব্যবহারের সময়" নির্বাচন করেছেন।
ডায়ালগটিতে 'শুধুমাত্র এবার' এবং 'অস্বীকার করুন' বিকল্পগুলি রয়েছে।
চিত্র ৫। ব্যবহারকারী পূর্বে "Animate" এবং "Only" নির্বাচন করেছিলেন এবার ( চিত্র ৩ এর সংলাপে)।

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

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

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

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

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

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

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

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

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

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

কোডল্যাব

ভিডিও

নমুনা