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

ডিভাইস খুঁজুন
প্রথমে, আপনার অ্যাপকে কানেক্ট করার জন্য একটি ডিভাইস খুঁজতে হবে। BLE ডিভাইস খুঁজতে আপনি নিম্নলিখিত API-এর মধ্যে যেকোনও একটি ব্যবহার করতে পারেন:
- BLE ডিভাইস
খুঁজুন লিঙ্কে যেভাবে
বর্ণনা করা হয়েছে সেই অনুযায়ী
BluetoothLeScanner। (স্যাম্পেল) CompanionDeviceManagerকম্প্যানিয়ন ডিভাইস পেয়ারিং-এ যেমন বর্ণনা করা হয়েছে। (স্যাম্পেল)
ব্যাকগ্রাউন্ডে
অ্যাপ দেখা না গেলেও, এই API-এর যেকোনও একটি ব্যবহার করার ক্ষেত্রে কোনও সীমাবদ্ধতা নেই, তবে আপনার অ্যাপ প্রসেস চালু থাকতে হবে। অ্যাপ প্রসেস চালু না থাকলে, আপনি নিম্নলিখিত বিকল্পগুলি ব্যবহার করতে পারেন:
BluetoothLeScanner-এর জন্য: আপনার ফিল্টারের সাথে ম্যাচ করা ডিভাইস স্ক্যান করা হলে বিজ্ঞপ্তি পেতে,ScanCallbackঅবজেক্টের পরিবর্তেPendingIntentঅবজেক্ট সহstartScan()কল করুন। (স্যাম্পেল)CompanionDeviceManager-এর জন্য: আগে থেকে যুক্ত ডিভাইস রেঞ্জে থাকলে অ্যাপ চালু করতে ও চালু রাখতে কম্প্যানিয়ন অ্যাপ চালু রাখুন-এ দেওয়া নির্দেশাবলী অনুসরণ করুন। (স্যাম্পেল)
কোনও ডিভাইসে কানেক্ট করুন:
আপনি কোনও ডিভাইস খুঁজে পাওয়ার পরে সেটির সাথে কানেক্ট করতে, আপনাকে নিম্নলিখিত সোর্সগুলির মধ্যে কোনও একটি থেকে
ডিভাইসের জন্য একটি
BluetoothDevice ইনস্ট্যান্স পেতে হবে:
- আগের
বিভাগে যেমন বলা হয়েছে, সেই অনুযায়ী
BluetoothLeScannerস্ক্যান ফলাফল। BluetoothAdapter.getBondedDevices()থেকে বন্ডেড ডিভাইসের তালিকা পাওয়া গেছে।BluetoothAdapterক্যাশে,BluetoothAdapter.getRemoteLeDevice()ব্যবহার করে।
আপনার কাছে BluetoothDevice ইনস্ট্যান্স থাকলে, আপনি সংশ্লিষ্ট ডিভাইসে কানেকশন অনুরোধ শুরু করতে পারেন।
এর জন্য আপনাকে
connectGatt()
পদ্ধতিগুলির মধ্যে একটি কল করতে হবে। autoConnect বুলিয়ানে আপনি যে মান পাস করেন তা নির্ধারণ করে যে GATT ক্লায়েন্ট
নিম্নলিখিত দুটি কানেকশন মোডের মধ্যে কোনটি ব্যবহার করে:
- সরাসরি কানেক্ট করা (
autoconnect = false): পেরিফেরাল ডিভাইসের সাথে সরাসরি কানেক্ট করার চেষ্টা করুন এবং ডিভাইস উপলভ্য না থাকলে কানেক্ট করা যাবে না। কানেকশন বিচ্ছিন্ন হয়ে গেলে, GATT ক্লায়েন্ট অটোমেটিক আবার কানেক্ট করার চেষ্টা করে না। - অটোমেটিক কানেক্ট করুন (
autoconnect = true): পেরিফেরাল ডিভাইস উপলভ্য হলেই অটোমেটিক কানেক্ট করার চেষ্টা করুন। পেরিফেরাল ডিসকানেক্ট করলে বা পেরিফেরাল রেঞ্জের বাইরে চলে গেলে, পেরিফেরাল উপলভ্য হলে GATT ক্লায়েন্ট অটোমেটিক আবার কানেক্ট করার চেষ্টা করে।
ব্যাকগ্রাউন্ডে
অ্যাপ ব্যাকগ্রাউন্ডে চলাকালীন ডিভাইসের সাথে কানেক্ট করার ক্ষেত্রে কোনও বিধিনিষেধ নেই, তবে আপনার প্রসেস বন্ধ হয়ে গেলে কানেকশনও বন্ধ হয়ে যায়। এছাড়াও, ব্যাকগ্রাউন্ড থেকে অ্যাক্টিভিটি শুরু করার ক্ষেত্রে বিধিনিষেধ (Android 10 ও তার পরবর্তী ভার্সনে) বা ফোরগ্রাউন্ড পরিষেবা (Android 12 ও তার পরবর্তী ভার্সনে) আছে।
তাই, ব্যাকগ্রাউন্ডে কানেকশন পারফর্ম করতে, অ্যাপ নিম্নলিখিত সমাধান ব্যবহার করতে পারে:
- আপনার ডিভাইসের সাথে কানেক্ট করতে WorkManager
ব্যবহার করুন।
- আপনি একটি নির্দিষ্ট অ্যাকশন
সম্পাদন করার জন্য একটি
PeriodicWorkRequestবা একটিOneTimeWorkRequestসেট করতে পারেন, যদিও অ্যাপের বিধিনিষেধ প্রযোজ্য হতে পারে। - এছাড়াও, আপনি WorkManager-এর ফিচার যেমন কাজের সীমাবদ্ধতা, জরুরি ভিত্তিক কাজ, আবার চেষ্টা করার নীতি এবং আরও অনেক কিছু থেকে সুবিধা পেতে পারেন।
- কোনও টাস্ক সম্পূর্ণ করার জন্য কানেকশন যতটা সম্ভব দীর্ঘ সময় ধরে চালু রাখতে হলে, যেমন ডেটা সিঙ্ক করা বা পেরিফেরাল ডিভাইস থেকে পোলিং করা, সেক্ষেত্রে আপনাকে দীর্ঘ সময় ধরে চলা ওয়ার্কারদের জন্য সহায়তা সংক্রান্ত নির্দেশিকা অনুসরণ করে ফোরগ্রাউন্ড সার্ভিস চালু করতে হবে। তবে, Android 12 থেকে ফোরগ্রাউন্ড পরিষেবা লঞ্চ করার বিধিনিষেধ প্রযোজ্য হয়।
- আপনি একটি নির্দিষ্ট অ্যাকশন
সম্পাদন করার জন্য একটি
connectedDeviceধরনের ফোরগ্রাউন্ড পরিষেবা শুরু করুন।- কোনও টাস্ক সম্পূর্ণ করার জন্য কানেকশন যতটা সম্ভব দীর্ঘ সময় ধরে চালু রাখতে হলে, যেমন ডেটা সিঙ্ক করা বা পেরিফেরাল ডিভাইস থেকে পোলিং করা, সেক্ষেত্রে আপনাকে দীর্ঘ সময় ধরে চলা ওয়ার্কারদের জন্য সহায়তা সংক্রান্ত নির্দেশিকা অনুসরণ করে ফোরগ্রাউন্ড সার্ভিস চালু করতে হবে। তবে, Android 12 থেকে ফোরগ্রাউন্ড পরিষেবা লঞ্চ করার বিধিনিষেধ প্রযোজ্য হয়।
- ডিভাইস উপস্থিত থাকলে আপনার প্রসেস চালু করতে ডিভাইস
খুঁজুন-এ যেমন বর্ণনা করা হয়েছে সেই অনুযায়ী
PendingIntentঅবজেক্ট সহstartScan()-এ কল করুন। পেরিফেরাল ডিভাইস অবশ্যই বিজ্ঞাপন দিতে হবে।- আমরা আপনাকে একটি Worker এবং একটি Job শুরু করতে সাজেস্ট করছি। সিস্টেমের কারণে এটি বিঘ্নিত হতে পারে এবং তাই এটি শুধুমাত্র স্বল্প সময়ের জন্য যোগাযোগ করতে পারে।
- Android 12-এর আগের ভার্সনে আপনি সরাসরি
PendingIntentঅবজেক্ট থেকে ফোরগ্রাউন্ড সার্ভিস চালু করতে পারবেন।
- ব্যাকগ্রাউন্ড থেকে পরিষেবা চালু করতে
CompanionDeviceServiceএবংREQUEST_COMPANION_RUN_IN_BACKGROUNDঅথবাREQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUNDঅনুমতির মধ্যে যেকোনও একটি ব্যবহার করুন।
কোনও ডিভাইসের সাথে কানেক্টেড থাকুন
সাধারণত, অ্যাপের উচিত পেরিফেরাল ডিভাইসের সাথে কানেকশন শুধুমাত্র ততক্ষণ বজায় রাখা যতক্ষণ প্রয়োজন এবং টাস্ক সম্পূর্ণ হয়ে গেলে ডিসকানেক্ট করে দেওয়া। তবে, দুটি ক্ষেত্রে অ্যাপকে অনির্দিষ্টকালের জন্য কানেকশন চালু রাখতে হতে পারে:
উভয় ক্ষেত্রেই, নিম্নলিখিত বিকল্পগুলি উপলভ্য:
REQUEST_COMPANION_RUN_IN_BACKGROUNDঅনুমতি এবংCompanionDeviceManager.startObservingDevicePresence()পদ্ধতি সহCompanionDeviceServiceব্যবহার করুন।- অ্যাপটি ফোরগ্রাউন্ডে (বা
ছাড়-এর মধ্যে একটিতে)
থাকার সময়
connectedDeviceফোরগ্রাউন্ড টাইপ সহ ফোরগ্রাউন্ড পরিষেবা শুরু করুন।
অ্যাপের মধ্যে পরিবর্তন করার সময়
ডিভাইস খোঁজা, সেটির সাথে কানেক্ট করা এবং ডেটা ট্রান্সফার করা সময়সাপেক্ষ এবং
রিসোর্স ইনটেনসিভ। কানেকশন যাতে বিচ্ছিন্ন না হয় এবং ব্যবহারকারী যখনই অ্যাপের মধ্যে পরিবর্তন করেন বা একই সাথে
একাধিক টাস্ক করেন, তখন যাতে প্রতিবার সম্পূর্ণ প্রসেস করতে না হয়, তার জন্য অপারেশন শেষ না হওয়া পর্যন্ত কানেকশন চালু রাখতে হবে। আপনি
connectedDevice ধরনের ফোরগ্রাউন্ড পরিষেবা অথবা
কম্প্যানিয়ন ডিভাইসের উপস্থিতি
API ব্যবহার করতে পারেন।
পেরিফেরাল বিজ্ঞপ্তি শোনার সময়
পেরিফেরাল বিজ্ঞপ্তি শুনতে অ্যাপটিকে অবশ্যই
setCharacteristicNotification() কল করতে হবে,
onCharacteristicChanged() ব্যবহার করে কলব্যাক শুনতে হবে
এবং কানেকশন চালু রাখতে হবে। বেশিরভাগ অ্যাপের ক্ষেত্রে, CompanionDeviceService-এর সাথে এই ব্যবহারের কেসটি
সমর্থন করা সবচেয়ে ভালো কারণ অ্যাপটিকে সম্ভবত দীর্ঘ সময়ের জন্য
শোনা চালিয়ে যেতে হবে। তবে, আপনি ফোরগ্রাউন্ড সার্ভিসও ব্যবহার করতে পারেন।
উভয় ক্ষেত্রেই, কোনও প্রসেস বন্ধ হয়ে যাওয়ার পরে আপনি কোনও ডিভাইসে কানেক্ট করুন বিভাগে দেওয়া নির্দেশাবলী অনুসরণ করে আবার কানেক্ট করতে পারবেন।