ব্লুটুথ অনুমতি

আপনার অ্যাপে ব্লুটুথ বৈশিষ্ট্য ব্যবহার করার জন্য, আপনাকে বেশ কয়েকটি অনুমতি ঘোষণা করতে হবে। আপনার অ্যাপের ব্লুটুথ ক্লাসিক নাকি ব্লুটুথ লো এনার্জি (BLE) সমর্থন প্রয়োজন তাও আপনাকে উল্লেখ করতে হবে। যদি আপনার অ্যাপের ব্লুটুথ ক্লাসিক বা BLE প্রয়োজন না হয় কিন্তু তবুও এই প্রযুক্তিগুলি থেকে উপকৃত হতে পারে, তাহলে আপনি রানটাইমে উপলব্ধতা পরীক্ষা করতে পারেন।

অনুমতি ঘোষণা করুন

আপনার অ্যাপে আপনি যে অনুমতিগুলি ঘোষণা করেন তা আপনার অ্যাপের লক্ষ্য SDK সংস্করণের উপর নির্ভর করে।

Android 12 বা তার উচ্চতর ভার্সনকে টার্গেট করুন

দ্রষ্টব্য: অ্যান্ড্রয়েড ৮.০ (এপিআই লেভেল ২৬) এবং তার উচ্চতর সংস্করণে, কম্প্যানিয়ন ডিভাইস ম্যানেজার (সিডিএম) কম্প্যানিয়ন ডিভাইসের সাথে সংযোগ স্থাপনের জন্য আরও সুগম পদ্ধতি প্রদান করে, এই বিভাগে বর্ণিত অনুমতিগুলির তুলনায়। সিডিএম সিস্টেম আপনার অ্যাপের পক্ষ থেকে একটি পেয়ারিং UI প্রদান করে এবং এর জন্য অবস্থানের অনুমতির প্রয়োজন হয় না।

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

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

যদি আপনার অ্যাপটি Android 12 (API লেভেল 31) বা তার উচ্চতর ভার্সনের জন্য উপযুক্ত হয়, তাহলে আপনার অ্যাপের ম্যানিফেস্ট ফাইলে নিম্নলিখিত অনুমতিগুলি ঘোষণা করুন:

  1. যদি আপনার অ্যাপটি BLE পেরিফেরালগুলির মতো ব্লুটুথ ডিভাইসগুলি খুঁজছে , তাহলে BLUETOOTH_SCAN অনুমতি ঘোষণা করুন।
  2. যদি আপনার অ্যাপটি বর্তমান ডিভাইসটিকে অন্যান্য ব্লুটুথ ডিভাইসের কাছে আবিষ্কারযোগ্য করে তোলে , তাহলে BLUETOOTH_ADVERTISE অনুমতি ঘোষণা করুন।
  3. যদি আপনার অ্যাপটি ইতিমধ্যেই জোড়া লাগানো ব্লুটুথ ডিভাইসের সাথে যোগাযোগ করে , তাহলে BLUETOOTH_CONNECT অনুমতি ঘোষণা করুন।
  4. আপনার লিগ্যাসি ব্লুটুথ-সম্পর্কিত অনুমতি ঘোষণার জন্য, android:maxSdkVersion কে 30 তে সেট করুন। এই অ্যাপ সামঞ্জস্যের ধাপটি সিস্টেমকে আপনার অ্যাপকে শুধুমাত্র সেই ব্লুটুথ অনুমতিগুলি প্রদান করতে সাহায্য করে যা Android 12 বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে ইনস্টল করার সময় প্রয়োজন।
  5. যদি আপনার অ্যাপটি ব্লুটুথ স্ক্যানের ফলাফল ব্যবহার করে ভৌত অবস্থান নির্ণয় করে, তাহলে ACCESS_FINE_LOCATION অনুমতি ঘোষণা করুন। অন্যথায়, আপনি দৃঢ়ভাবে বলতে পারেন যে আপনার অ্যাপটি ভৌত ​​অবস্থান নির্ণয় করে না এবং ACCESS_FINE_LOCATION অনুমতির জন্য android:maxSdkVersion 30 এ সেট করুন।

BLUETOOTH_ADVERTISE , BLUETOOTH_CONNECT , এবং BLUETOOTH_SCAN অনুমতিগুলি রানটাইম অনুমতি । অতএব, ব্লুটুথ ডিভাইসগুলি অনুসন্ধান করার আগে, অন্য ডিভাইসগুলির জন্য একটি ডিভাইস আবিষ্কারযোগ্য করার জন্য, অথবা ইতিমধ্যেই জোড়াযুক্ত ব্লুটুথ ডিভাইসগুলির সাথে যোগাযোগ করার আগে আপনাকে অবশ্যই আপনার অ্যাপে ব্যবহারকারীর অনুমোদনের জন্য স্পষ্টভাবে অনুরোধ করতে হবে। যখন আপনার অ্যাপ এই অনুমতিগুলির মধ্যে অন্তত একটির জন্য অনুরোধ করে, তখন সিস্টেম ব্যবহারকারীকে আপনার অ্যাপটিকে কাছাকাছি ডিভাইসগুলিতে অ্যাক্সেস করার অনুমতি দেওয়ার জন্য অনুরোধ করে, যেমনটি চিত্র 1-এ দেখানো হয়েছে।

নিম্নলিখিত কোড স্নিপেটটি দেখায় যে আপনার অ্যাপে ব্লুটুথ-সম্পর্কিত অনুমতিগুলি কীভাবে ঘোষণা করবেন যদি এটি অ্যান্ড্রয়েড 12 বা তার উচ্চতর সংস্করণকে লক্ষ্য করে:

<manifest>
    <!-- Request legacy Bluetooth permissions on older devices. -->
    <uses-permission android:name="android.permission.BLUETOOTH"
                     android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
                     android:maxSdkVersion="30" />

    <!-- Needed only if your app looks for Bluetooth devices.
         If your app doesn't use Bluetooth scan results to derive physical
         location information, you can
         <a href="#assert-never-for-location">strongly assert that your app
         doesn't derive physical location</a>. -->
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />

    <!-- Needed only if your app makes the device discoverable to Bluetooth
         devices. -->
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />

    <!-- Needed only if your app communicates with already-paired Bluetooth
         devices. -->
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

    <!-- Needed only if your app uses Bluetooth scan results to derive
         physical location. -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    ...
</manifest>

দৃঢ়ভাবে দাবি করুন যে আপনার অ্যাপটি ভৌত ​​অবস্থান নির্ধারণ করে না।

যদি আপনার অ্যাপটি ভৌত ​​অবস্থান নির্ণয়ের জন্য ব্লুটুথ স্ক্যানের ফলাফল ব্যবহার না করে, তাহলে আপনি দৃঢ়ভাবে বলতে পারেন যে আপনার অ্যাপটি ভৌত ​​অবস্থান নির্ণয়ের জন্য কখনই ব্লুটুথ অনুমতি ব্যবহার করে না। এটি করার জন্য, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. আপনার BLUETOOTH_SCAN অনুমতি ঘোষণায় android:usesPermissionFlags অ্যাট্রিবিউট যোগ করুন এবং এই অ্যাট্রিবিউটের মান neverForLocation এ সেট করুন।

  2. যদি আপনার অ্যাপের জন্য অবস্থানের প্রয়োজন না হয়, তাহলে আপনার অ্যাপের ম্যানিফেস্ট থেকে ACCESS_FINE_LOCATION অনুমতিটি সরিয়ে ফেলুন।

নিম্নলিখিত কোড স্নিপেটটি আপনার অ্যাপের ম্যানিফেস্ট ফাইলটি কীভাবে আপডেট করবেন তা দেখায়:

<manifest>
    <!-- Include "neverForLocation" only if you can strongly assert that
         your app never derives physical location from Bluetooth scan results. -->
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN"
                     android:usesPermissionFlags="neverForLocation" />

    <!-- Set maxSdkVersion to 30 if you can strongly assert that, on
         Android 12 and higher, your app never derives physical location from
         Bluetooth scan results and doesn't need location access for any other
         purpose. -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="30" />
    ...
</manifest>

Android 11 বা তার আগের ভার্সন টার্গেট করুন

যদি আপনার অ্যাপটি Android 11 (API লেভেল 30) বা তার নিচের ভার্সনকে টার্গেট করে, তাহলে আপনার অ্যাপের ম্যানিফেস্ট ফাইলে নিম্নলিখিত অনুমতিগুলি ঘোষণা করুন:

  • যেকোনো ব্লুটুথ ক্লাসিক বা BLE যোগাযোগের জন্য BLUETOOTH প্রয়োজন, যেমন সংযোগের অনুরোধ করা, সংযোগ গ্রহণ করা এবং ডেটা স্থানান্তর করা।
  • ACCESS_FINE_LOCATION প্রয়োজনীয় কারণ, Android 11 এবং তার আগের ভার্সনে, ব্যবহারকারীর অবস্থান সম্পর্কে তথ্য সংগ্রহের জন্য একটি ব্লুটুথ স্ক্যান ব্যবহার করা যেতে পারে।

যেহেতু অবস্থানের অনুমতিগুলি রানটাইম অনুমতি , তাই আপনাকে রানটাইমে এই অনুমতিগুলির জন্য অনুরোধ করতে হবে এবং আপনার ম্যানিফেস্টে সেগুলি ঘোষণা করতে হবে।

স্থানীয় ব্লুটুথ ডিভাইসগুলি আবিষ্কার করুন

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

<manifest>
...
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
...
</manifest>

যদি আপনার অ্যাপটি কোনও পরিষেবা সমর্থন করে এবং Android 10 (API লেভেল 29) বা Android 11-এ চলতে পারে, তাহলে আপনাকে ব্লুটুথ ডিভাইসগুলি আবিষ্কার করার জন্য ACCESS_BACKGROUND_LOCATION অনুমতিও ঘোষণা করতে হবে। এই প্রয়োজনীয়তা সম্পর্কে আরও তথ্যের জন্য, ব্যাকগ্রাউন্ডে অ্যাক্সেস অবস্থান দেখুন।

নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে ACCESS_BACKGROUND_LOCATION অনুমতি ঘোষণা করতে হয়:

<manifest>
...
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
...
</manifest>

অ্যাপের অনুমতি ঘোষণা সম্পর্কে আরও তথ্যের জন্য <uses-permission> রেফারেন্স দেখুন।

ব্লুটুথ বৈশিষ্ট্যের ব্যবহার নির্দিষ্ট করুন

যদি ব্লুটুথ আপনার অ্যাপের একটি গুরুত্বপূর্ণ অংশ হয়, তাহলে আপনি আপনার ম্যানিফেস্ট ফাইলে এই প্রয়োজনীয়তা নির্দেশ করে ফ্ল্যাগ যোগ করতে পারেন। <uses-feature> উপাদানটি আপনাকে আপনার অ্যাপটি কোন ধরণের হার্ডওয়্যার ব্যবহার করে এবং এটি প্রয়োজনীয় কিনা তা নির্দিষ্ট করতে দেয়।

এই উদাহরণটি দেখায় যে কীভাবে আপনার অ্যাপের জন্য ব্লুটুথ ক্লাসিক প্রয়োজন তা নির্দেশ করবেন।

<uses-feature android:name="android.hardware.bluetooth" android:required="true"/>

যদি আপনার অ্যাপটি ব্লুটুথ লো এনার্জির উপর নির্ভর করে, তাহলে আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

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

রানটাইমের সময় বৈশিষ্ট্যের উপলভ্যতা পরীক্ষা করুন

ব্লুটুথ ক্লাসিক বা BLE সাপোর্ট করে না এমন ডিভাইসগুলিতে আপনার অ্যাপটি উপলব্ধ করার জন্য, আপনার অ্যাপের ম্যানিফেস্টে <uses-feature> উপাদানটি অন্তর্ভুক্ত করা উচিত, তবে required="false" সেট করা উচিত। তারপর, রান-টাইমে, আপনি PackageManager.hasSystemFeature() ব্যবহার করে বৈশিষ্ট্যের উপলব্ধতা নির্ধারণ করতে পারেন:

কোটলিন

// Check to see if the Bluetooth classic feature is available.
val bluetoothAvailable = packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)

// Check to see if the BLE feature is available.
val bluetoothLEAvailable = packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)

জাভা

// Use this check to determine whether Bluetooth classic is supported on the device.
// Then you can selectively disable BLE-related features.
boolean bluetoothAvailable = getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);

// Use this check to determine whether BLE is supported on the device. Then
// you can selectively disable BLE-related features.
boolean bluetoothLEAvailable = getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE);