বাংলায় অ্যান্ড্রয়েড সহায়িকা - Bangla Android Guide

অডিও ফোকাসের ক্ষতি/হারিয়ে ফেলা কে ব্যবস্থপনা করা

যদি আপনার অ্যাপ অডিও ফোকাস রিকোয়েস্ট করতে পারে, এটা অনুসরন করে যে এটা পালাক্রমে লস করে যখন অন্য অ্যাপ এটাকে রিকোয়েস্ট করে। আপনার অ্যাপ অডিও ফোকাসের লস কীভাবে রেসপন্স করে তা নির্ভর করে ঐ লসের আচরনের উপর।

অডিও ফোকাসের onAudioFocusChange()কলব্যাক মেথড শ্রোতা যা আপনি রেজিস্টার করেছেন তাকে পরিবর্তন করে যখন রিকোয়েস্টিং অডিও ফোকাস একটি মানদন্ড ব্যবহার করে যা ফোকাস চেঞ্জ ইভেন্ট আলোচনা করে। নির্দিষ্টভাবে, সম্ভাব্য ফোকাস লস ইভেন্ট ফোকাস রিকোয়েস্ট টাইপ কে প্রতিফলিত করে-পূর্ববর্তী সেকশন থেকে- স্থায়ী লস, অস্থায়ী লস এবং অস্থায়ী সাথে ডাকিং পারমিটেড।

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

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

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

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT
            // Pause playback
        } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
            // Resume playback
        } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
            am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
            am.abandonAudioFocus(afChangeListener);
            // Stop playback
        }
    }
};

অডিও ফোকাসের একটি অস্থায়ী লসের ক্ষেত্রে ডাকিং অনুমতি প্রাপ্ত, প্লেব্যাক পজ না করে আপনি পরিবর্তে “ডাক” করতে ডারেন।