পটভূমিতে যোগাযোগ করুন, পটভূমিতে যোগাযোগ করুন, পটভূমিতে যোগাযোগ করুন, পটভূমিতে যোগাযোগ করুন

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

এই প্রতিটি ব্যবহারের ক্ষেত্রে সমর্থন করার জন্য একাধিক বিকল্প রয়েছে। প্রতিটির সুবিধা এবং অসুবিধা রয়েছে যা এটিকে আপনার নির্দিষ্ট প্রয়োজনের জন্য কমবেশি উপযুক্ত করে তুলতে পারে।

নিম্নলিখিত চিত্রটি এই পৃষ্ঠায় নির্দেশিকাটির একটি সরলীকৃত দৃশ্য দেখায়:

একটি ডিভাইস খুঁজুন

প্রথমে, আপনার অ্যাপের সাথে সংযোগ করার জন্য একটি ডিভাইস খুঁজে বের করতে হবে। একটি BLE ডিভাইস খুঁজে পেতে আপনি নিম্নলিখিত API গুলির মধ্যে একটি ব্যবহার করতে পারেন:

ব্যাকগ্রাউন্ডে

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

  • BluetoothLeScanner এর জন্য: আপনার ফিল্টারের সাথে মেলে এমন একটি ডিভাইস স্ক্যান করা হলে বিজ্ঞপ্তি পেতে ScanCallback অবজেক্টের পরিবর্তে একটি PendingIntent অবজেক্টের সাথে startScan() কল করুন। ( নমুনা )
  • CompanionDeviceManager এর জন্য: অ্যাপটিকে জাগানোর জন্য সহচর অ্যাপগুলিকে জাগ্রত রাখুন -এ নির্দেশিকা অনুসরণ করুন এবং পূর্বে যুক্ত ডিভাইসের পরিসরে থাকাকালীন এটিকে জাগিয়ে রাখুন। ( নমুনা )

একটি ডিভাইসের সাথে সংযোগ করুন

আপনি এটি খুঁজে পাওয়ার পরে একটি ডিভাইসের সাথে সংযোগ করতে, আপনাকে নিম্নলিখিত উত্সগুলির মধ্যে একটি থেকে ডিভাইসটির জন্য একটি BluetoothDevice উদাহরণ পেতে হবে:

আপনার একটি BluetoothDevice ইনস্ট্যান্স থাকার পরে, আপনি connectGatt() পদ্ধতিগুলির একটিতে কল করে সংশ্লিষ্ট ডিভাইসে একটি সংযোগের অনুরোধ শুরু করতে পারেন। আপনি autoConnect বুলিয়ানে যে মানটি পাস করেন তা নির্ধারণ করে যে GATT ক্লায়েন্ট নিম্নলিখিত দুটি সংযোগ মোডগুলির মধ্যে কোনটি ব্যবহার করে:

  • সরাসরি সংযোগ ( autoconnect = false ): পেরিফেরাল ডিভাইসের সাথে সরাসরি সংযোগ করার চেষ্টা করুন এবং ডিভাইসটি উপলব্ধ না হলে ব্যর্থ হন। সংযোগ বিচ্ছিন্ন হওয়ার ক্ষেত্রে, GATT ক্লায়েন্ট স্বয়ংক্রিয়ভাবে পুনরায় সংযোগ করার চেষ্টা করে না।
  • স্বয়ংক্রিয় সংযোগ ( autoconnect = true ): পেরিফেরাল ডিভাইসটি উপলব্ধ হলে স্বয়ংক্রিয়ভাবে সংযোগ করার চেষ্টা করুন। পেরিফেরাল দ্বারা শুরু করা সংযোগ বিচ্ছিন্ন হওয়ার ক্ষেত্রে বা পেরিফেরালটি সীমার বাইরে থাকায়, GATT ক্লায়েন্ট স্বয়ংক্রিয়ভাবে পেরিফেরাল উপলব্ধ হলে পুনরায় সংযোগ করার চেষ্টা করে।

ব্যাকগ্রাউন্ডে

অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় একটি ডিভাইসের সাথে সংযোগ করার উপর কোন বিধিনিষেধ নেই, যদিও আপনার প্রক্রিয়াটি বন্ধ হয়ে গেলে সংযোগটি বন্ধ হয়ে যায়। এছাড়াও ব্যাকগ্রাউন্ড থেকে ক্রিয়াকলাপ (Android 10 এবং উচ্চতর) বা ফোরগ্রাউন্ড পরিষেবাগুলিতে (Android 12 এবং উচ্চতর) শুরু করার উপর বিধিনিষেধ রয়েছে।

সুতরাং, ব্যাকগ্রাউন্ডে থাকাকালীন একটি সংযোগ সম্পাদন করতে, অ্যাপগুলি নিম্নলিখিত সমাধানগুলি ব্যবহার করতে পারে:

একটি ডিভাইসের সাথে সংযুক্ত থাকুন

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

উভয় ক্ষেত্রে, নিম্নলিখিত বিকল্পগুলি উপলব্ধ:

অ্যাপগুলির মধ্যে স্যুইচ করার সময়

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

পেরিফেরাল বিজ্ঞপ্তি শোনার সময়

পেরিফেরাল বিজ্ঞপ্তিগুলি শোনার জন্য অ্যাপটিকে অবশ্যই setCharacteristicNotification() কল করতে হবে, onCharacteristicChanged() ব্যবহার করে কলব্যাক শুনতে হবে এবং সংযোগটি সজীব রাখতে হবে। বেশিরভাগ অ্যাপের জন্য, CompanionDeviceService সাথে এই ব্যবহারের ক্ষেত্রে সমর্থন করা ভাল কারণ অ্যাপটিকে সম্ভবত দীর্ঘ সময়ের জন্য শোনার প্রয়োজন হবে। যাইহোক, আপনি একটি ফোরগ্রাউন্ড পরিষেবাও ব্যবহার করতে পারেন।

উভয় ক্ষেত্রেই, আপনি একটি ডিভাইসের সাথে সংযোগ বিভাগে নির্দেশাবলী অনুসরণ করে একটি সমাপ্ত প্রক্রিয়ার পরে পুনরায় সংযোগ করতে পারেন৷