এই নির্দেশিকায় বর্ণনা করা হয়েছে, কীভাবে আপনি পরিচিত অ্যান্ড্রয়েড এপিআই ব্যবহার করে Wear OS অ্যাপে অডিও চালাতে পারেন।
অডিও ডিভাইস সনাক্ত করুন
একটি Wear OS অ্যাপকে প্রথমে শনাক্ত করতে হবে যে পরিধানযোগ্য ডিভাইসটিতে একটি উপযুক্ত অডিও আউটপুট আছে কিনা। পরিধানযোগ্য ডিভাইসগুলিতে সাধারণত নিম্নলিখিত অডিও আউটপুটগুলির মধ্যে অন্তত একটি থাকে:
-
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER: অন্তর্নির্মিত স্পিকারযুক্ত ডিভাইসগুলিতে। -
AudioDeviceInfo.TYPE_BLUETOOTH_A2DP: যখন একটি ব্লুটুথ হেডসেট পেয়ার এবং কানেক্টেড থাকে। -
AudioDeviceInfo.TYPE_BLE_BROADCAST: যখন একটি ব্লুটুথ লো এনার্জি (BLE) ব্রডকাস্ট গ্রুপ ডিভাইস পেয়ার এবং কানেক্টেড থাকে। -
AudioDeviceInfo.TYPE_BLE_HEADSET: যখন একটি BLE হেডসেট পেয়ার এবং কানেক্টেড থাকে। -
AudioDeviceInfo.TYPE_BLE_SPEAKER: যখন একটি BLE স্পিকার পেয়ার এবং কানেক্টেড থাকে।
নিম্নলিখিত উদাহরণে, কোনো অডিও আউটপুট টাইপ উপলব্ধ আছে কিনা তা পরীক্ষা করার জন্য getDevices() মেথডের সাথে FEATURE_AUDIO_OUTPUT ভ্যালুটি ব্যবহার করা হয়েছে।
private val audioManager: AudioManager by lazy { getSystemService(AUDIO_SERVICE) as AudioManager } fun audioOutputAvailable(type: Int): Boolean { if (!packageManager.hasSystemFeature(PackageManager.FEATURE_AUDIO_OUTPUT)) { return false } return audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS).any { it.type == type } }
এরপর আপনি এই পদ্ধতি ব্যবহার করে কোনো অডিও আউটপুট টাইপ উপলব্ধ আছে কিনা তা পরীক্ষা করতে পারেন।
val hasSpeaker = audioOutputAvailable(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) val hasBluetoothHeadset = audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) val hasBLEBroadcast = audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) val hasBLEHeadset = audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) val hasBLESpeaker = audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)
সর্বোত্তম ব্যবহারকারী অভিজ্ঞতা প্রদানের জন্য, শুধুমাত্র যখন ঘড়িটির সাথে ব্লুটুথ হেডফোন বা স্পিকার সংযুক্ত থাকবে, তখনই মিডিয়া চালান।
অডিও আউটপুটের জন্য পছন্দের ডিভাইস নির্বাচন করুন
আপনার অ্যাপের ব্যবহারের ক্ষেত্র এবং এর মূল অভিজ্ঞতায় অডিওর গুরুত্বের ওপর নির্ভর করে, ব্যবহারকারীরা আপনার অ্যাপের অডিও আউটপুটের সাথে কীভাবে যুক্ত হবে তা বেছে নিন।
ব্যবহারকারীকে মিডিয়া আউটপুট ডিভাইস বেছে নিতে দিন
Wear OS 5 থেকে শুরু করে, সিস্টেমটি এমন একটি ইউজার ইন্টারফেস (UI) প্রদান করে যা ব্যবহারকারীদের মিডিয়া চালানোর জন্য ডিভাইস বেছে নিতে দেয় এবং প্লে হওয়া মিডিয়া কন্টেন্ট সম্পর্কে তথ্য প্রদর্শন করে।
Wear OS 5 বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে অডিও প্লেব্যাক করার সময় যদি আপনার অ্যাপ শনাক্ত করে যে কোনো ব্লুটুথ হেডসেট সংযুক্ত নেই, তবে ব্যবহারকারীকে সরাসরি মিডিয়া আউটপুট সুইচারে নিয়ে যাওয়ার প্রস্তাব দিন। যেসব ডিভাইস মিডিয়া আউটপুট সুইচার সমর্থন করে না, সেগুলিতে ACTION_BLUETOOTH_SETTINGS ইন্টেন্ট অ্যাকশনটি চালু করুন, যা ব্যবহারকারীকে সিস্টেম সেটিংসের ব্লুটুথ পৃষ্ঠায় নিয়ে যায়।
গিটহাবে থাকা Horologist লাইব্রেরির অংশ launchOutputSelection() মেথডটি দেখায়, কীভাবে ব্যবহারকারীরা তাদের মিডিয়া আউটপুট ডিভাইস বেছে নিতে পারেন।
ব্লুটুথ হেডসেট
বিল্ট-ইন স্পিকারের মতো নয়, যা ডিভাইসে থাকলে সর্বদা উপলব্ধ থাকে, একটি ব্লুটুথ হেডসেট কোনো অ্যাপ চলার সময়েও পেয়ার বা আনপেয়ার করা যায়। যদি আপনার অ্যাপটি চালিয়ে যাওয়ার জন্য একটি হেডসেটের প্রয়োজন হয়, তাহলে ব্যবহারকারী কখন একটি ব্লুটুথ হেডসেট সংযোগ এবং সংযোগ বিচ্ছিন্ন করে তা শনাক্ত করতে registerAudioDeviceCallback ব্যবহার করে একটি কলব্যাক রেজিস্টার করুন।
val audioDeviceCallback = object : AudioDeviceCallback() { override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>?) { super.onAudioDevicesAdded(addedDevices) if (audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER) ) { // A Bluetooth or BLE device is connected and available for playback. } } override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>?) { super.onAudioDevicesRemoved(removedDevices) if (!(audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)) ) { // No Bluetooth or BLE devices are connected anymore. } } } audioManager.registerAudioDeviceCallback(audioDeviceCallback, /*handler=*/ null)
অডিও আউটপুট দেওয়ার সময় যদি আপনার অ্যাপ শনাক্ত করে যে কোনো ব্লুটুথ হেডসেট সংযুক্ত নেই, তাহলে কোনো ত্রুটির বার্তা দেখাবেন না। এর পরিবর্তে, ব্যবহারকারীকে সরাসরি ব্লুটুথ সেটিংসে নিয়ে যাওয়ার প্রস্তাব দিন, যাতে তাদের জন্য সংযোগ করা সহজ হয়। আপনি ACTION_BLUETOOTH_SETTINGS সহ একটি ইন্টেন্ট পাঠিয়ে এটি করতে পারেন।
fun Context.launchBluetoothSettings(closeOnConnect: Boolean = true) { val intent = with(Intent(Settings.ACTION_BLUETOOTH_SETTINGS)) { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) putExtra("EXTRA_CONNECTION_ONLY", true) if (closeOnConnect) { putExtra("EXTRA_CLOSE_ON_CONNECT", true) } putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", FILTER_TYPE_AUDIO) } startActivity(intent) } internal const val FILTER_TYPE_AUDIO = 1
অন্তর্নির্মিত স্পিকার
বেশিরভাগ Wear OS ডিভাইসে বিল্ট-ইন স্পিকার থাকে। আপনার অ্যাপে যদি এমন কোনো নন-মিডিয়া ব্যবহারের সুযোগ থাকে যেখানে শব্দ ব্যবহৃত হয়, তবে ব্যবহারকারীকে আরও বেশি সম্পৃক্ত করতে স্পিকার ব্যবহার করার কথা ভাবতে পারেন। উদাহরণস্বরূপ, স্পিকারযুক্ত একটি Wear OS ডিভাইস অডিও নোটিফিকেশনের মাধ্যমে ঘড়ি বা টাইমার অ্যালার্ম চালু করতে পারে, এবং ফিটনেস অ্যাপগুলো ব্যায়ামের নির্দেশনা দেওয়ার জন্য স্পিকার ব্যবহার করতে পারে।
বিস্তারিত জানতে WearSpeakerSample দেখুন।
অডিও চালান
একটি উপযুক্ত অডিও আউটপুট শনাক্ত ও বেছে নেওয়ার পর, Wear OS-এ অডিও চালানো মোবাইল বা অন্যান্য ডিভাইসের মতোই। আরও তথ্যের জন্য, MediaPlayer ওভারভিউ দেখুন। উন্নত ফিচারগুলো, যেমন—মিডিয়া স্ট্রিমিং ও ডাউনলোড, সহজে ব্যবহার করার জন্য ExoPlayer ব্যবহার করুন। অডিও অ্যাপের জন্য সেরা অনুশীলনগুলো অনুসরণ করুন, যেমন— অডিও ফোকাস পরিচালনা করা ।
অন্তর্নির্মিত স্পিকারের মাধ্যমে অনাকাঙ্ক্ষিত মিডিয়া প্লেব্যাক প্রতিরোধ করুন।
ঘড়ির বিল্ট-ইন স্পিকারে অনিচ্ছাকৃতভাবে মিডিয়া প্লে হওয়া রোধ করতে মিডিয়া অ্যাপগুলো এই নির্দেশিকা অনুসরণ করতে পারে। আপনার অ্যাপ যে প্লেয়ার ব্যবহার করে, তার ওপর নির্ভর করে এই নির্দেশিকা ভিন্ন হতে পারে।
এক্সোপ্লেয়ার
যদি আপনার অ্যাপ ExoPlayer ব্যবহার করে:
- ExoPlayer ইনস্ট্যান্স তৈরি করার সময়
setSuppressPlaybackOnUnsuitableOutput(true)মেথডটি কল করুন:
val exoPlayer = ExoPlayer.Builder(context) .setAudioAttributes(AudioAttributes.DEFAULT, true) .setSuppressPlaybackOnUnsuitableOutput(true) .build()
- ExoPlayer ইনস্ট্যান্সের লিসেনার হিসেবে
WearUnsuitableOutputPlaybackSuppressionResolverListenerলিসেনারটি রেজিস্টার করে প্লেব্যাক সাপ্রেশন ইভেন্টের প্রতিক্রিয়া জানান:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
হোরোলজিস্ট মিডিয়া টুলকিট
হোরোলজিস্ট মিডিয়াটুলকিটে আগে থেকেই এমন লজিক রয়েছে যা ঘড়ির অন্তর্নির্মিত স্পিকারগুলিতে অনাকাঙ্ক্ষিত মিডিয়া প্লেব্যাক প্রতিরোধ করে।
অন্যান্য মিডিয়া প্লেয়ার
- নিশ্চিত করুন যে মিডিয়া অডিও প্লেব্যাক শুধুমাত্র তখনই শুরু হয় যখন ঘড়িটির সাথে একটি উপযুক্ত আউটপুট ডিভাইস, যেমন হেডসেট বা এক্সটার্নাল স্পিকার, সংযুক্ত থাকে। মিডিয়া অ্যাপগুলির জন্য উপযুক্ত আউটপুট ডিভাইসগুলির তালিকাটি নিচে দেওয়া হলো:
- যদি
AudioManagerআপনার অ্যাপকে জানায় যে কোনো বাহ্যিক অডিও আউটপুট ডিভাইস ঘড়ি থেকে সংযোগ বিচ্ছিন্ন হয়েছে , তাহলে প্লেব্যাক থামিয়ে দিন। - যখন ব্যবহারকারী মিডিয়া প্লেব্যাক শুরু করার চেষ্টা করেন কিন্তু কোনো বাহ্যিক অডিও ডিভাইস সংযুক্ত করেননি, তখন তাকে তার ঘড়িতে একটি ডিভাইস সংযুক্ত করতে বলুন ।