যখন আপনার অ্যাপটি ব্যাকগ্রাউন্ডে চলছে তখন পেরিফেরাল ডিভাইসগুলির সাথে যোগাযোগের জন্য কী ব্যবহারের ক্ষেত্রে কীভাবে সমর্থন করা যায় এই নির্দেশিকাটি একটি ওভারভিউ প্রদান করে:
এই প্রতিটি ব্যবহারের ক্ষেত্রে সমর্থন করার জন্য একাধিক বিকল্প রয়েছে। প্রতিটির সুবিধা এবং অসুবিধা রয়েছে যা এটিকে আপনার নির্দিষ্ট প্রয়োজনের জন্য কমবেশি উপযুক্ত করে তুলতে পারে।
নিম্নলিখিত চিত্রটি এই পৃষ্ঠায় নির্দেশিকাটির একটি সরলীকৃত দৃশ্য দেখায়:
একটি ডিভাইস খুঁজুন
প্রথমে, আপনার অ্যাপের সাথে সংযোগ করার জন্য একটি ডিভাইস খুঁজে বের করতে হবে। একটি BLE ডিভাইস খুঁজে পেতে আপনি নিম্নলিখিত API গুলির মধ্যে একটি ব্যবহার করতে পারেন:
-
BluetoothLeScanner
ফাইন্ড বিএলই ডিভাইসে বর্ণিত। ( নমুনা ) -
CompanionDeviceManager
যেমন Companion ডিভাইস পেয়ারিং -এ বর্ণিত হয়েছে। ( নমুনা )
ব্যাকগ্রাউন্ডে
অ্যাপটি দৃশ্যমান না থাকাকালীন এই 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()
কল করুন যেমন ডিভাইসটি উপস্থিত থাকলে আপনার প্রক্রিয়াটিকে জাগিয়ে তুলতে একটি ডিভাইস খুঁজুন এ বর্ণিত। পেরিফেরাল ডিভাইস বিজ্ঞাপন হতে হবে.- আমরা সুপারিশ করি যে আপনি একজন কর্মী এবং একটি চাকরি শুরু করুন। এটি সিস্টেম দ্বারা বিঘ্নিত হতে পারে এবং এইভাবে এটি শুধুমাত্র স্বল্প সময়ের যোগাযোগ সমর্থন করতে পারে।
- 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
সাথে এই ব্যবহারের ক্ষেত্রে সমর্থন করা ভাল কারণ অ্যাপটিকে সম্ভবত দীর্ঘ সময়ের জন্য শোনার প্রয়োজন হবে। যাইহোক, আপনি একটি ফোরগ্রাউন্ড পরিষেবাও ব্যবহার করতে পারেন।
উভয় ক্ষেত্রেই, আপনি একটি ডিভাইসের সাথে সংযোগ বিভাগে নির্দেশাবলী অনুসরণ করে একটি সমাপ্ত প্রক্রিয়ার পরে পুনরায় সংযোগ করতে পারেন৷