Wear OS অ্যাপে অডিও চালানোর জন্য আপনি কীভাবে পরিচিত Android API ব্যবহার করতে পারবেন তা এই নির্দেশিকায় বর্ণনা করা হয়েছে।
অডিও ডিভাইস শনাক্ত করা
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 স্পিকার পেয়ার করা ও কানেক্ট করা থাকলে।
কোনও অডিও আউটপুট উপলভ্য আছে কিনা তা চেক করতে, নিম্নলিখিত উদাহরণে
FEATURE_AUDIO_OUTPUT ভ্যালু সহ getDevices() পদ্ধতি ব্যবহার করা হয়েছে।
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 ইনটেন্ট
অ্যাকশন চালু করুন, যা ব্যবহারকারীকে সিস্টেম সেটিংসের ব্লুটুথ পৃষ্ঠায় নিয়ে যায়।
GitHub-এ 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 ব্যবহার করলে:
- ExoPlayer ইনস্ট্যান্স তৈরি করার সময়
setSuppressPlaybackOnUnsuitableOutput(true)মেথড কল করুন:
val exoPlayer = ExoPlayer.Builder(context) .setAudioAttributes(AudioAttributes.DEFAULT, true) .setSuppressPlaybackOnUnsuitableOutput(true) .build()
- ExoPlayer ইনস্ট্যান্সের
WearUnsuitableOutputPlaybackSuppressionResolverListenerলিসনার হিসেবে লিসনার রেজিস্টার করে প্লেব্যাক সাপ্রেশন ইভেন্টে প্রতিক্রিয়া জানান:
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Horologist Media toolkit
Horologist MediaToolkit-এ আগে থেকেই বিল্ট-ইন ওয়াচ স্পিকারে অনাকাঙ্ক্ষিত মিডিয়া প্লেব্যাক আটকানোর লজিক রয়েছে।
অন্যান্য মিডিয়া প্লেয়ার
- দেখে নিন যে উপযুক্ত আউটপুট ডিভাইস, যেমন, হেডসেট বা এক্সটার্নাল স্পিকার, ওয়াচের সাথে কানেক্ট করা থাকলেই তবেই যেন মিডিয়া অডিও প্লেব্যাক শুরু হয়। নিচে দেওয়া তালিকায় মিডিয়া অ্যাপের জন্য উপযুক্ত আউটপুট ডিভাইস দেখানো হয়েছে:
AudioManagerআপনার অ্যাপকে বিজ্ঞপ্তি দিয়ে জানালে যে কোনও এক্সটার্নাল অডিও আউটপুট ডিভাইস ওয়াচ থেকে ডিসকানেক্ট হয়ে গেছে, প্লেব্যাক পজ করুন।- ব্যবহারকারী যখন মিডিয়া প্লেব্যাক শুরু করার চেষ্টা করেন কিন্তু কোনও এক্সটার্নাল অডিও ডিভাইস কানেক্ট করেননি, তখন তাদের ওয়াচে একটি ডিভাইস কানেক্ট করার জন্য প্রম্পট করুন।