পরিধানযোগ্য জিনিসপত্রে অডিও চালান

এই নির্দেশিকাটি বর্ণনা করে কিভাবে 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() পদ্ধতি ব্যবহার করে।

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

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 }
}

// True if the device has a speaker
audioOutputAvailable(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER)

// True if a Bluetooth headset is paired and connected
audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP)

// True if a BLE broadcast group device is paired and connected
audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST)

// True if a BLE headset is paired and connected
audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET)

// True if a BLE speaker is paired and connected
audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)

সর্বোত্তম ব্যবহারকারীর অভিজ্ঞতা দেওয়ার জন্য, আপনার অ্যাপটি নিশ্চিত হওয়া উচিত যে শুধুমাত্র যখন ব্লুটুথ হেডফোন বা স্পিকার ঘড়ির সাথে সংযুক্ত থাকে তখনই মিডিয়া চালায়।

অডিও আউটপুট জন্য পছন্দের ডিভাইস চয়ন করুন

আপনার অ্যাপের ব্যবহারের ক্ষেত্রে এবং আপনার অ্যাপের মূল অভিজ্ঞতায় অডিওর গুরুত্বের উপর নির্ভর করে, আপনি কীভাবে ব্যবহারকারীদের আপনার অ্যাপের অডিও আউটপুটের সাথে যুক্ত করতে চান তা চয়ন করুন।

ব্লোটুথ হেডসেট

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

ব্যবহারকারী কখন registerAudioDeviceCallback ব্যবহার করে একটি ব্লুটুথ হেডসেট সংযোগ করে এবং সংযোগ বিচ্ছিন্ন করে তা সনাক্ত করতে একটি কলব্যাক নিবন্ধন করুন:

audioManager.registerAudioDeviceCallback(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.
        }
    }
}, null)
  

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

  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)
      putExtra("EXTRA_CLOSE_ON_CONNECT", true)
      putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", 1)
  }
  startActivity(intent)
  

বক্তারা

বেশিরভাগ Wear OS ডিভাইসে স্পিকার থাকে। যদি আপনার অ্যাপ এমন একটি নন-মিডিয়া ব্যবহারের ক্ষেত্রে অফার করে যা শব্দকে অন্তর্ভুক্ত করে, তাহলে ব্যবহারকারীর সাথে ব্যস্ততার একটি অতিরিক্ত মাত্রা অফার করতে স্পিকার ব্যবহার করার কথা বিবেচনা করুন। উদাহরণস্বরূপ, একটি স্পিকার-সজ্জিত Wear OS ডিভাইস একটি ঘড়ি বা টাইমার অ্যালার্ম ট্রিগার করতে পারে, অডিও বিজ্ঞপ্তি সহ সম্পূর্ণ, এবং ফিটনেস অ্যাপগুলি ব্যায়ামের নির্দেশাবলী প্রদান করতে স্পিকার ব্যবহার করতে পারে।

দ্রষ্টব্য: স্পিকাররা মিডিয়া বিষয়বস্তু শোনার জন্য সেরা অভিজ্ঞতা প্রদান করে না কারণ তারা এই উদ্দেশ্যে ডিজাইন করা হয়নি।

বিস্তারিত জানার জন্য WearSpeakerSample পড়ুন।

অডিও চালান

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

স্পিকারের মাধ্যমে অনিচ্ছাকৃত মিডিয়া প্লেব্যাক প্রতিরোধ করুন

বিল্ট-ইন ঘড়ির স্পিকারগুলিতে অ্যাপটি অনিচ্ছাকৃতভাবে মিডিয়া সামগ্রী চালায় না তা নিশ্চিত করতে মিডিয়া অ্যাপগুলি নিম্নলিখিত নির্দেশিকা অনুসরণ করতে পারে। অ্যাপটি কোন প্লেয়ার ব্যবহার করছে তার উপর ভিত্তি করে নির্দেশিকা আলাদা।

এক্সো প্লেয়ার

যদি আপনার অ্যাপ ExoPlayer ব্যবহার করে:

  1. ExoPlayer দৃষ্টান্ত তৈরি করার সময় সেটSuppressPlaybackOnUnsuitableOutput(সত্য) কল করুন:

      ExoPlayer exoplayer = ExoPlayer.Builder(context)
              .setAudioAttributes(...)
              .setSuppressPlaybackWhenUnsuitableOutput(true)
              // ...
              .build()
          
  2. ExoPlayer উদাহরণের একজন শ্রোতা হিসাবে WearUnsuitableOutputPlaybackSuppressionResolverListener নিবন্ধন করে প্লেব্যাক দমন ইভেন্টে প্রতিক্রিয়া জানান:

  3.   exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
        

হরোলজিস্ট মিডিয়া টুলকিট

Horologist MediaToolkit ইতিমধ্যেই অন্তর্নির্মিত ঘড়ি স্পীকারগুলিতে অনাকাঙ্ক্ষিত মিডিয়া প্লেব্যাক প্রতিরোধ করার জন্য যুক্তি রয়েছে৷

অন্যান্য মিডিয়া প্লেয়ার