আপনার অ্যাপে ব্লুটুথ বৈশিষ্ট্যগুলি ব্যবহার করতে, আপনাকে অবশ্যই বেশ কয়েকটি অনুমতি ঘোষণা করতে হবে৷ আপনার অ্যাপটি ব্লুটুথ ক্লাসিক বা ব্লুটুথ লো এনার্জি (BLE) এর জন্য সমর্থন প্রয়োজন কিনা তাও উল্লেখ করা উচিত। যদি আপনার অ্যাপের ব্লুটুথ ক্লাসিক বা BLE প্রয়োজন না হয় কিন্তু তবুও এই প্রযুক্তিগুলি থেকে উপকৃত হতে পারে, আপনি রানটাইমে উপলব্ধতা পরীক্ষা করতে পারেন৷
অনুমতি ঘোষণা করুন
আপনি আপনার অ্যাপে যে অনুমতিগুলি ঘোষণা করেন তা আপনার অ্যাপের টার্গেট SDK সংস্করণের উপর নির্ভর করে।
টার্গেট Android 12 বা উচ্চতর
দ্রষ্টব্য: Android 8.0 (API স্তর 26) এবং উচ্চতর, কম্প্যানিয়ন ডিভাইস ম্যানেজার (CDM) এই বিভাগে বর্ণিত অনুমতিগুলির তুলনায় সহচর ডিভাইসগুলির সাথে সংযোগ করার একটি আরও সুগম পদ্ধতি প্রদান করে৷ CDM সিস্টেম আপনার অ্যাপের পক্ষ থেকে একটি পেয়ারিং UI প্রদান করে এবং এর জন্য অবস্থানের অনুমতির প্রয়োজন হয় না।
আপনি যদি পেয়ারিং এবং সংযোগ করার অভিজ্ঞতার উপর আরও নিয়ন্ত্রণ চান, এই বিভাগে বর্ণিত অনুমতিগুলি ব্যবহার করুন৷
যদি আপনার অ্যাপটি Android 12 (API লেভেল 31) বা উচ্চতরকে লক্ষ্য করে, তাহলে আপনার অ্যাপের ম্যানিফেস্ট ফাইলে নিম্নলিখিত অনুমতিগুলি ঘোষণা করুন:
- যদি আপনার অ্যাপটি ব্লুটুথ ডিভাইসের সন্ধান করে , যেমন BLE পেরিফেরাল, তাহলে
BLUETOOTH_SCAN
অনুমতি ঘোষণা করুন। - যদি আপনার অ্যাপ বর্তমান ডিভাইসটিকে অন্য ব্লুটুথ ডিভাইসে আবিষ্কারযোগ্য করে তোলে , তাহলে
BLUETOOTH_ADVERTISE
অনুমতি ঘোষণা করুন। - আপনার অ্যাপ্লিকেশান যদি ইতিমধ্যে-জোড়া ব্লুটুথ ডিভাইসগুলির সাথে যোগাযোগ করে , তাহলে
BLUETOOTH_CONNECT
অনুমতি ঘোষণা করুন৷ - আপনার লিগ্যাসি ব্লুটুথ-সম্পর্কিত অনুমতি ঘোষণার জন্য,
android:maxSdkVersion
30
এ সেট করুন। এই অ্যাপ সামঞ্জস্যপূর্ণ পদক্ষেপটি সিস্টেমকে আপনার অ্যাপটিকে শুধুমাত্র সেই ব্লুটুথ অনুমতিগুলি দিতে সাহায্য করে যা Android 12 বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে ইনস্টল করার সময় এটির প্রয়োজন। - যদি আপনার অ্যাপটি ব্লুটুথ স্ক্যান ফলাফল ব্যবহার করে শারীরিক অবস্থান জানতে,
ACCESS_FINE_LOCATION
অনুমতি ঘোষণা করুন। অন্যথায়, আপনি দৃঢ়ভাবে দাবি করতে পারেন যে আপনার অ্যাপটি প্রকৃত অবস্থান তৈরি করে না ।
BLUETOOTH_ADVERTISE
, BLUETOOTH_CONNECT
, এবং BLUETOOTH_SCAN
অনুমতিগুলি হল রানটাইম অনুমতি ৷ অতএব, আপনি ব্লুটুথ ডিভাইসগুলি সন্ধান করতে, একটি ডিভাইসকে অন্য ডিভাইসের জন্য আবিষ্কারযোগ্য করে তুলতে বা ইতিমধ্যে-পেয়ার করা ব্লুটুথ ডিভাইসগুলির সাথে যোগাযোগ করার আগে আপনাকে অবশ্যই আপনার অ্যাপে ব্যবহারকারীর অনুমোদনের জন্য স্পষ্টভাবে অনুরোধ করতে হবে। যখন আপনার অ্যাপ্লিকেশান এই অনুমতিগুলির মধ্যে অন্তত একটির জন্য অনুরোধ করে, তখন সিস্টেমটি ব্যবহারকারীকে আপনার অ্যাপ্লিকেশানকে আশেপাশের ডিভাইসগুলি অ্যাক্সেস করার অনুমতি দেওয়ার জন্য অনুরোধ করে, যেমন চিত্র 1 এ দেখানো হয়েছে৷
নিম্নলিখিত কোড স্নিপেটটি দেখায় যে কীভাবে আপনার অ্যাপে ব্লুটুথ-সম্পর্কিত অনুমতিগুলি ঘোষণা করতে হয় যদি এটি Android 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>
দৃঢ়ভাবে দাবি করুন যে আপনার অ্যাপটি প্রকৃত অবস্থান তৈরি করে না
যদি আপনার অ্যাপটি ব্লুটুথ স্ক্যানের ফলাফলগুলি শারীরিক অবস্থানের জন্য ব্যবহার না করে, তাহলে আপনি দৃঢ়ভাবে দাবি করতে পারেন যে আপনার অ্যাপ কখনই প্রকৃত অবস্থান জানার জন্য ব্লুটুথ অনুমতি ব্যবহার করে না। এটি করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
আপনার
BLUETOOTH_SCAN
অনুমতি ঘোষণায়android:usesPermissionFlags
অ্যাট্রিবিউট যোগ করুন এবং এই অ্যাট্রিবিউটের মানneverForLocation
এ সেট করুন।আপনার অ্যাপের জন্য লোকেশনের প্রয়োজন না হলে, আপনার অ্যাপের ম্যানিফেস্ট থেকে
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" />
<!-- Not needed if you can strongly assert that your app never derives
physical location from Bluetooth scan results and doesn't need location
access for any other purpose. -->
<strike><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /></strike>
...
</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"/>
আপনি যদি বলেন যে বৈশিষ্ট্যটি আপনার অ্যাপের জন্য প্রয়োজনীয়, তাহলে Google Play স্টোর সেই বৈশিষ্ট্যগুলি নেই এমন ডিভাইসগুলিতে ব্যবহারকারীদের থেকে আপনার অ্যাপটি লুকিয়ে রাখবে। এই কারণে, যদি আপনার অ্যাপটি বৈশিষ্ট্যটি ছাড়া কাজ করতে না পারে তবে আপনার প্রয়োজনীয় বৈশিষ্ট্যটি 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);