ব্লুটুথ

Android অনেক সাধারণ ইন-কার ব্লুটুথ প্রোফাইলের জন্য সমর্থন সহ একটি সম্পূর্ণ ব্লুটুথ বাস্তবায়ন প্রদান করে। এছাড়াও অনেক বর্ধিতকরণ রয়েছে যা অন্যান্য ডিভাইস এবং পরিষেবাগুলির সাথে কর্মক্ষমতা এবং অভিজ্ঞতা উন্নত করে৷

ব্লুটুথ সংযোগ ব্যবস্থাপনা

Android-এর মধ্যে, CarBluetoothService বর্তমান ব্যবহারকারীর ব্লুটুথ ডিভাইস এবং IVI-তে প্রতিটি প্রোফাইল সংযোগের জন্য অগ্রাধিকার তালিকা বজায় রাখে। ডিভাইসগুলি একটি সংজ্ঞায়িত অগ্রাধিকার ক্রমে প্রোফাইলের সাথে সংযুক্ত থাকে। একটি প্রোফাইলে ডিভাইসগুলিকে কখন সক্ষম, অক্ষম এবং সংযোগ করতে হবে তা একটি ডিফল্ট সংযোগ নীতি দ্বারা চালিত হয় যা ইচ্ছা হলে একটি সংস্থান ওভারলে ব্যবহার করে ওভাররাইড করা যেতে পারে৷

স্বয়ংচালিত সংযোগ ব্যবস্থাপনা কনফিগার করুন

ডিফল্ট ফোন নীতি নিষ্ক্রিয় করুন

অ্যান্ড্রয়েড ব্লুটুথ স্ট্যাক ডিফল্টরূপে সক্ষম ফোনগুলির জন্য একটি সংযোগ নীতি বজায় রাখে৷ এই নীতিটি আপনার ডিভাইসে অক্ষম করতে হবে যাতে এটি CarBluetoothService- এর উদ্দেশ্যযুক্ত স্বয়ংচালিত নীতির সাথে বিরোধ না করে। গাড়ির পণ্যের ওভারলে আপনার জন্য এটির যত্ন নেওয়া উচিত, আপনি /packages/apps/Bluetooth/res/values/config.xmlMAXIMUM_CONNECTED_DEVICESenable_phone_policy কে false সেট করে রিসোর্স ওভারলেতে ফোন নীতি নিষ্ক্রিয় করতে পারেন।

ডিফল্ট স্বয়ংচালিত নীতি ব্যবহার করুন

CarBluetoothService ডিফল্ট প্রোফাইল অনুমতি বজায় রাখে। পরিচিত ডিভাইসগুলির তালিকা এবং তাদের প্রোফাইল পুনরায় সংযোগের অগ্রাধিকারগুলি service/src/com/android/car/BluetoothProfileDeviceManager.java এ রয়েছে।

পাশাপাশি, ব্লুটুথ সংযোগ ব্যবস্থাপনা নীতিটি service/src/com/android/car/BluetoothDeviceConnectionPolicy.java এ পাওয়া যাবে। ডিফল্টরূপে, এই নীতিটি দৃষ্টান্তগুলিকে সংজ্ঞায়িত করে যখন ব্লুটুথকে বন্ডেড ডিভাইসগুলির সাথে সংযোগ এবং সংযোগ বিচ্ছিন্ন করা উচিত৷ অ্যাডাপ্টার কখন চালু এবং বন্ধ করা উচিত তার জন্য এটি গাড়ি-নির্দিষ্ট ক্ষেত্রেও পরিচালনা করে।

আপনার নিজস্ব স্বয়ংচালিত সংযোগ ব্যবস্থাপনা নীতি তৈরি করুন

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

ডিফল্ট স্বয়ংচালিত নীতি অক্ষম করুন

প্রথমত, একটি কাস্টম নীতি ব্যবহার করতে, একটি রিসোর্স ওভারলেতে useDefaultBluetoothConnectionPolicy false সেট করে ডিফল্ট স্বয়ংচালিত নীতি নিষ্ক্রিয় করতে হবে। এই সংস্থানটিকে মূলত packages/services/Car/service/res/values/config.xmlMAXIMUM_CONNECTED_DEVICES এর অংশ হিসাবে সংজ্ঞায়িত করা হয়েছে।

ব্লুটুথ অ্যাডাপ্টার সক্ষম এবং অক্ষম করুন

আপনার নীতির মূল কাজগুলির মধ্যে একটি হল উপযুক্ত সময়ে ব্লুটুথ অ্যাডাপ্টার চালু এবং বন্ধ করা। অ্যাডাপ্টার সক্রিয় এবং নিষ্ক্রিয় করতে আপনি BluetoothAdapter.enable() এবং BluetoothAdapter.disable() ফ্রেমওয়ার্ক API ব্যবহার করতে পারেন৷ এই কলগুলি ব্যবহারকারীর সেটিংস বা অন্য কোনও উপায়ে নির্বাচিত স্থায়ী অবস্থাকে সম্মান করা উচিত। এটি করার একটি উপায় নিম্নরূপ:

/**
 * Turn on the Bluetooth adapter.
 */
private void enableBluetooth() {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (bluetoothAdapter == null) {
        return;
    }
    bluetoothAdapter.enable();
}

/**
 * Turn off the Bluetooth adapter.
 */
private void disableBluetooth() {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (bluetoothAdapter == null) {
        return;
    }
    // Will shut down _without_ persisting the off state as the desired state
    // of the Bluetooth adapter for next start up. This does nothing if the adapter
    // is already off, keeping the existing saved desired state for next reboot.
    bluetoothAdapter.disable(false);
}

ব্লুটুথ অ্যাডাপ্টার কখন চালু এবং বন্ধ করতে হবে তা নির্ধারণ করুন

আপনার কাস্টম নীতির সাহায্যে আপনি কোন ইভেন্টগুলি অ্যাডাপ্টার সক্ষম এবং নিষ্ক্রিয় করার সেরা সময় নির্দেশ করে তা নির্ধারণ করতে স্বাধীন। এটি করার একটি উপায় হল CarPowerManager এ পাওয়ার স্টেট MAXIMUM_CONNECTED_DEVICES ব্যবহার করা:

private final CarPowerStateListenerWithCompletion mCarPowerStateListener =
        new CarPowerStateListenerWithCompletion() {
    @Override
    public void onStateChanged(int state, CompletableFuture<Void> future) {
        if (state == CarPowerManager.CarPowerStateListener.ON) {
            if (isBluetoothPersistedOn()) {
                enableBluetooth();
            }
            return;
        }

        // "Shutdown Prepare" is when the user perceives the car as off
        // This is a good time to turn off Bluetooth
        if (state == CarPowerManager.CarPowerStateListener.SHUTDOWN_PREPARE) {
            disableBluetooth();

            // Let CarPowerManagerService know we're ready to shut down
            if (future != null) {
                future.complete(null);
            }
            return;
        }
    }
};

কখন ডিভাইস সংযোগ করতে হবে তা নির্ধারণ করুন

একইভাবে, আপনি যখন ইভেন্টগুলি নির্ধারণ করেন যা ডিভাইস সংযোগগুলিকে শুরু করতে ট্রিগার করবে, তখন CarBluetoothManager connectDevices() API কল সরবরাহ করে যা প্রতিটি ব্লুটুথ প্রোফাইলের জন্য সংজ্ঞায়িত অগ্রাধিকার তালিকার উপর ভিত্তি করে ডিভাইসগুলিকে সংযুক্ত করতে এগিয়ে যায়।

আপনি কখন এটি করতে চান তার একটি উদাহরণ হল যখনই ব্লুটুথ অ্যাডাপ্টার চালু হয়:

private class BluetoothBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
            int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
            if (state == BluetoothAdapter.STATE_ON) {
                // mContext should be your app's context
                Car car = Car.createCar(mContext);
                CarBluetoothManager carBluetoothManager =
                        (CarBluetoothManager) car.getCarManager(Car.BLUETOOTH_SERVICE);
                carBluetoothManager.connectDevices();
            }
        }
    }
}

স্বয়ংচালিত সংযোগ ব্যবস্থাপনা যাচাই করুন

আপনার সংযোগ নীতির আচরণ যাচাই করার সবচেয়ে সহজ উপায় হল আপনার IVI-এ ব্লুটুথ সক্ষম করা এবং এটি সঠিক ক্রমে সঠিক ডিভাইসের সাথে স্বয়ংক্রিয়ভাবে সংযোগ করে তা যাচাই করা। আপনি সেটিংস UI এর মাধ্যমে বা নিম্নলিখিত adb কমান্ডের মাধ্যমে ব্লুটুথ অ্যাডাপ্টার টগল করতে পারেন:

adb shell su u$(adb shell am get-current-user)_system svc bluetooth disable
adb shell su u$(adb shell am get-current-user)_system svc bluetooth enable

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

adb shell dumpsys car_service

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

অটোমোটিভ ব্লুটুথ প্রোফাইল

অ্যান্ড্রয়েডে, আইভিআই ব্লুটুথের মাধ্যমে একযোগে সংযুক্ত একাধিক ডিভাইস সমর্থন করতে পারে। মাল্টি-ডিভাইস ব্লুটুথ ফোন পরিষেবাগুলি ব্যবহারকারীদের একযোগে পৃথক ডিভাইসগুলিকে সংযুক্ত করতে দেয়, যেমন একটি ব্যক্তিগত ফোন এবং একটি কাজের ফোন, এবং যেকোনো একটি ডিভাইস থেকে হ্যান্ডস-ফ্রি কল করতে।

সংযোগ সীমা প্রতিটি পৃথক ব্লুটুথ প্রোফাইল দ্বারা প্রয়োগ করা হয়, সাধারণত প্রোফাইল পরিষেবার বাস্তবায়নের মধ্যেই। ডিফল্টরূপে, CarBluetoothService অনুমোদিত সর্বাধিক সংখ্যক সংযুক্ত ডিভাইসের বিষয়ে আর কোনো সিদ্ধান্ত নেয় না।

হ্যান্ডস-ফ্রি প্রোফাইল

ব্লুটুথ হ্যান্ডস-ফ্রি প্রোফাইল (HFP) গাড়িটিকে একটি সংযুক্ত দূরবর্তী ডিভাইসের মাধ্যমে ফোন কল করতে এবং গ্রহণ করতে দেয়। প্রতিটি ডিভাইস সংযোগ TelecomManager- এর সাথে একটি পৃথক ফোন অ্যাকাউন্ট নিবন্ধন করে, যা IVI অ্যাপগুলিতে উপলব্ধ ফোন অ্যাকাউন্টগুলির বিজ্ঞাপন দেয়৷

IVI HFP এর মাধ্যমে একাধিক ডিভাইসের সাথে সংযোগ করতে পারে। HeadsetClientServiceMAX_STATE_MACHINES_POSSIBLE MAXIMUM_CONNECTED_DEVICES একযোগে HFP সংযোগের সর্বাধিক সংখ্যা নির্ধারণ করে৷

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

এটি লক্ষ করা উচিত যে ডিফল্ট ডায়ালার অ্যাপ একাধিক একই সাথে সংযুক্ত এইচএফপি ডিভাইস সমর্থন করে না। মাল্টি-ডিভাইস HFP বাস্তবায়নের জন্য, ব্যবহারকারীদের কল করার সময় কোন ডিভাইস অ্যাকাউন্ট ব্যবহার করতে হবে তা নির্বাচন করতে দিতে কাস্টমাইজেশন প্রয়োজন। অ্যাপটি তারপর telecomManager.placeCall সঠিক অ্যাকাউন্ট দিয়ে কল করে। আপনাকে যাচাই করতে হবে যে অন্যান্য মাল্টি-ডিভাইস কার্যকারিতাও উদ্দেশ্য অনুযায়ী কাজ করে।

মাল্টি-ডিভাইস HFP যাচাই করুন

ব্লুটুথের মাধ্যমে মাল্টি-ডিভাইস সংযোগ সঠিকভাবে কাজ করে তা পরীক্ষা করতে:

  1. ব্লুটুথ ব্যবহার করে, একটি ডিভাইসকে IVI-এর সাথে সংযুক্ত করুন এবং ডিভাইস থেকে অডিও স্ট্রিম করুন।
  2. ব্লুটুথের মাধ্যমে IVI-তে দুটি ফোন সংযুক্ত করুন।
  3. একটি ফোন বাছুন। ফোন থেকে সরাসরি একটি আউটগোয়িং কল করুন এবং IVI ব্যবহার করে একটি আউটগোয়িং কল করুন৷
    1. উভয় সময়, স্ট্রিম করা অডিও পজ যাচাই করুন এবং ফোনের অডিও আইভিআই সংযুক্ত স্পীকারে বাজছে।
  4. একই ফোন ব্যবহার করে, ফোনে সরাসরি একটি ইনকামিং কল গ্রহণ করুন এবং IVI ব্যবহার করে একটি ইনকামিং কল গ্রহণ করুন৷
    1. উভয় সময়, স্ট্রিমিং অডিও পজ যাচাই করুন এবং ফোন অডিও আইভিআই সংযুক্ত স্পীকারে বাজছে।
  5. অন্য সংযুক্ত ফোনের সাথে ধাপ 3 এবং 4 পুনরাবৃত্তি করুন৷

জরুরী কলিং

জরুরী কল করার ক্ষমতা গাড়ির টেলিফোনি এবং ব্লুটুথ ফাংশনের একটি গুরুত্বপূর্ণ দিক। IVI থেকে জরুরী কল শুরু করা যেতে পারে এমন অনেক উপায় রয়েছে, যার মধ্যে রয়েছে:

  • স্বতন্ত্র eCall সমাধান
  • eCall সলিউশন আইভিআইতে একীভূত
  • কোনো বিল্ট-ইন সিস্টেম উপলব্ধ না থাকলে একটি সংযুক্ত ব্লুটুথ ফোনের উপর নির্ভর করা

একটি জরুরী কল সংযোগ করুন

যদিও eCall সরঞ্জাম নিরাপত্তা-গুরুত্বপূর্ণ, এটি বর্তমানে Android-এ একত্রিত নয়। অ্যান্ড্রয়েডের মাধ্যমে জরুরী কলিং বৈশিষ্ট্যগুলি প্রকাশ করতে ConnectionService ব্যবহার করা সম্ভব, যা জরুরি কলগুলির জন্য অ্যাক্সেসিবিলিটি বিকল্পগুলি চালু করার সুবিধাও রয়েছে৷ আরও জানতে, একটি কলিং অ্যাপ তৈরি করা দেখুন।

এখানে একটি জরুরী সংযোগ পরিষেবা কীভাবে স্থাপন করা যায় তার একটি উদাহরণ রয়েছে:

public class YourEmergencyConnectionService extends ConnectionService {

    @Override
    public Connection onCreateOutgoingConnection(
            PhoneAccountHandle connectionManagerAccount,
            ConnectionRequest request) {
        // Your equipment specific procedure to make ecall
        // ...
    }

    private void onYourEcallEquipmentReady() {

        PhoneAccountHandle handle =
            new PhoneAccountHandle(new ComponentName(context, YourEmergencyConnectionService),
                    YourEmergencyConnectionId);
        PhoneAccount account =
            new PhoneAccount.Builder(handle, eCallOnlyAccount)
            .setSupportedUriSchemes(Arrays.asList(PhoneAccount.SCHEME_TEL))
            .setCapabilities(PhoneAccount.CAPABILITY_PLACE_EMERGENCY_CALLS
                    | PhoneAccount.CAPABILITY_MULTI_USER)
            .build():
        mTelecomManager.registerPhoneAccount(account);
        mTelecomManager.enablePhoneAccount(account.getAccountHandle(), true);
    }
}

জরুরি কলের জন্য ব্লুটুথ চালু করুন

অ্যান্ড্রয়েড 10 এর আগে জরুরি কল করার সাথে একটি ফোন থেকে সরাসরি ডায়াল করা এবং উপলব্ধ থাকলে বিশেষ সরঞ্জাম ব্যবহার করা জড়িত (উদাহরণস্বরূপ, বিপদ সনাক্তকরণ বা ব্যবহারকারীর পদক্ষেপের পরে স্বয়ংক্রিয়-ট্রিগার)। Android 10 এবং উচ্চতর সংস্করণে, গাড়ির ডায়ালার সরাসরি একটি জরুরি নম্বরে কল করতে পারে, এই MAXIMUM_CONNECTED_DEVICES apps/Bluetooth/res/values/config.xml এ দেওয়া

<!-- For supporting emergency call through the hfp client connection service --> <bool name=”hfp_client_connection_service_support_emergency_call”>true</bool>

এইভাবে জরুরী কলিং কার্যকর করার মাধ্যমে, ভয়েস শনাক্তকরণের মতো অন্যান্য অ্যাপগুলিও জরুরি নম্বরে কল করতে পারে।

ফোন বুক অ্যাক্সেস প্রোফাইল

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

PBAP একমুখী এবং তাই PbapClientService এ যেকোনো MAXIMUM_CONNECTED_DEVICES এর সাথে সংযোগ স্থাপনের জন্য IVI-এর প্রয়োজন IVI-এর সাথে অনুমোদিত একযোগে PBAP ডিভাইস সংযোগের সর্বোচ্চ সংখ্যা নির্ধারণ করে। PBAP ক্লায়েন্ট প্রতিটি সংযুক্ত ডিভাইসের জন্য পরিচিতিগুলিকে পরিচিতি প্রদানকারীতে সঞ্চয় করে যা প্রতিটি ডিভাইসের জন্য ফোন বুক পেতে একটি অ্যাপ দ্বারা অ্যাক্সেস করা যেতে পারে।

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

বার্তা অ্যাক্সেস প্রোফাইল

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

বার্তা পাঠানো এবং গ্রহণ করার উদ্দেশ্যে একটি মোবাইল ডিভাইসের সাথে সংযোগ করার জন্য, IVI-কে অবশ্যই MAP সংযোগ শুরু করতে হবে। MapClientServiceMAXIMUM_CONNECTED_DEVICES IVI-এর সাথে অনুমোদিত একযোগে MAP ডিভাইস সংযোগের সর্বাধিক সংখ্যা সংজ্ঞায়িত করে৷ বার্তা স্থানান্তর করার আগে প্রতিটি সংযোগ অবশ্যই IVI এবং মোবাইল ডিভাইস দ্বারা অনুমোদিত হতে হবে।

উন্নত অডিও বিতরণ প্রোফাইল

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

অন্যান্য প্রোফাইলের বিপরীতে, সংযুক্ত A2DP ডিভাইসের সর্বাধিক সংখ্যা নেটিভ স্ট্যাকে প্রয়োগ করা হয় এবং জাভাতে নয়। packages/modules/Bluetooth/system/btif/src/btif_av.cckDefaultMaxConnectedAudioDevices ভেরিয়েবল ব্যবহার করে মানটি বর্তমানে 1 এ হার্ডকোড করা হয়েছে।

অডিও/ভিডিও রিমোট কন্ট্রোল প্রোফাইল

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

একটি অ্যান্ড্রয়েড ফোনে একটি নির্দিষ্ট মিডিয়া প্লেয়ার যাতে AVRCP-এর মাধ্যমে IVI দ্বারা ব্রাউজ করা যায়, ফোনের মিডিয়া অ্যাপটিকে অবশ্যই একটি MediaBrowserService প্রদান করতে হবে এবং সেই পরিষেবাটিতে com.android.bluetooth অ্যাক্সেসের অনুমতি দিতে হবে। একটি মিডিয়া ব্রাউজার পরিষেবা তৈরি করা বিশদভাবে এটি কীভাবে করতে হয় তা ব্যাখ্যা করে।