অ্যান্ড্রয়েড একটি পূর্ণাঙ্গ ব্লুটুথ ব্যবস্থা প্রদান করে, যা গাড়ির অনেক প্রচলিত ব্লুটুথ প্রোফাইল সমর্থন করে। এছাড়াও এতে এমন অনেক উন্নতি করা হয়েছে যা অন্যান্য ডিভাইস ও পরিষেবার সাথে এর কর্মক্ষমতা এবং অভিজ্ঞতাকে আরও উন্নত করে।
ব্লুটুথ সংযোগ ব্যবস্থাপনা
অ্যান্ড্রয়েডের মধ্যে, CarBluetoothService IVI-এর সাথে প্রতিটি প্রোফাইল সংযোগের জন্য বর্তমান ব্যবহারকারীর ব্লুটুথ ডিভাইস এবং অগ্রাধিকার তালিকা বজায় রাখে। ডিভাইসগুলো একটি নির্দিষ্ট অগ্রাধিকার ক্রম অনুসারে প্রোফাইলগুলোতে সংযুক্ত হয়। কখন একটি প্রোফাইলে ডিভাইসগুলোকে সক্রিয়, নিষ্ক্রিয় এবং সংযুক্ত করতে হবে, তা একটি ডিফল্ট সংযোগ নীতি দ্বারা চালিত হয়, যা চাইলে একটি রিসোর্স ওভারলে ব্যবহার করে পরিবর্তন করা যেতে পারে।
স্বয়ংচালিত সংযোগ ব্যবস্থাপনা কনফিগার করুন
ডিফল্ট ফোন নীতি নিষ্ক্রিয় করুন
অ্যান্ড্রয়েড ব্লুটুথ স্ট্যাক ফোনের জন্য একটি সংযোগ নীতি বজায় রাখে যা ডিফল্টরূপে সক্রিয় থাকে। এই নীতিটি আপনার ডিভাইসে নিষ্ক্রিয় করতে হবে যাতে এটি CarBluetoothService- এ থাকা উদ্দিষ্ট অটোমোটিভ নীতির সাথে সাংঘর্ষিক না হয়। যদিও কার প্রোডাক্ট ওভারলে আপনার জন্য এই কাজটি করে দেবে, আপনি /packages/apps/Bluetooth/res/values/config.xml এর MAXIMUM_CONNECTED_DEVICES এ enable_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.xml এর MAXIMUM_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) গাড়িটিকে একটি সংযুক্ত রিমোট ডিভাইসের মাধ্যমে ফোন কল করতে ও গ্রহণ করতে দেয়। প্রতিটি ডিভাইস সংযোগ টেলিকমম্যানেজারে একটি পৃথক ফোন অ্যাকাউন্ট নিবন্ধন করে, যা IVI অ্যাপগুলিতে যেকোনো উপলব্ধ ফোন অ্যাকাউন্টের তথ্য প্রচার করে।
IVI HFP-এর মাধ্যমে একাধিক ডিভাইসের সাথে সংযোগ করতে পারে। HeadsetClientService এর MAX_STATE_MACHINES_POSSIBLE MAXIMUM_CONNECTED_DEVICES একযোগে সর্বোচ্চ সংখ্যক HFP সংযোগ নির্ধারণ করে।
যখন কোনো ব্যবহারকারী ডিভাইস থেকে ফোন কল করেন বা গ্রহণ করেন, তখন সংশ্লিষ্ট ফোন অ্যাকাউন্টটি একটি HfpClientConnection অবজেক্ট তৈরি করে। ডায়ালার অ্যাপটি কল গ্রহণ করা বা কেটে দেওয়ার মতো কলের বৈশিষ্ট্যগুলো পরিচালনা করার জন্য HfpClientConnection অবজেক্টটির সাথে ইন্টারঅ্যাক্ট করে।
উল্লেখ্য যে, ডিফল্ট ডায়ালার অ্যাপটি একই সাথে একাধিক HFP ডিভাইস সংযুক্ত থাকা সমর্থন করে না। মাল্টি-ডিভাইস HFP বাস্তবায়ন করার জন্য, ব্যবহারকারীদের কল করার সময় কোন ডিভাইস অ্যাকাউন্ট ব্যবহার করতে হবে তা বেছে নেওয়ার সুযোগ দিতে কাস্টমাইজেশন প্রয়োজন। এরপর অ্যাপটি সঠিক অ্যাকাউন্ট ব্যবহার করে telecomManager.placeCall কে কল করে। আপনাকে যাচাই করে দেখতে হবে যে অন্যান্য মাল্টি-ডিভাইস কার্যকারিতাও উদ্দেশ্য অনুযায়ী কাজ করছে কিনা।
একাধিক ডিভাইসে HFP যাচাই করুন
ব্লুটুথের মাধ্যমে একাধিক ডিভাইসের সংযোগ সঠিকভাবে কাজ করছে কিনা তা পরীক্ষা করতে:
- ব্লুটুথ ব্যবহার করে IVI-এর সাথে একটি ডিভাইস সংযুক্ত করুন এবং ডিভাইসটি থেকে অডিও স্ট্রিম করুন।
- ব্লুটুথের মাধ্যমে IVI-এর সাথে দুটি ফোন সংযুক্ত করুন।
- একটি ফোন বেছে নিন। সরাসরি ফোন থেকে একটি আউটগোয়িং কল করুন, এবং IVI ব্যবহার করেও একটি আউটগোয়িং কল করুন।
- উভয়বারই যাচাই করে দেখুন যে স্ট্রিম করা অডিওটি থেমে যায় এবং ফোনের অডিওটি IVI-এর সাথে সংযুক্ত স্পিকারগুলিতে বাজতে শুরু করে।
- একই ফোন ব্যবহার করে সরাসরি ফোনে ইনকামিং কল রিসিভ করুন এবং IVI ব্যবহার করেও ইনকামিং কল রিসিভ করুন।
- উভয়বারই যাচাই করে দেখুন যে স্ট্রিমিং অডিও থেমে যায় এবং ফোনের অডিও IVI-সংযুক্ত স্পিকারগুলিতে বাজতে শুরু করে।
- অন্য সংযুক্ত ফোনটির সাথে ৩ এবং ৪ নম্বর ধাপগুলো পুনরাবৃত্তি করুন।
জরুরি কল
গাড়ির টেলিফোনি এবং ব্লুটুথ ফাংশনের একটি গুরুত্বপূর্ণ দিক হলো জরুরি কল করার ক্ষমতা। IVI থেকে বিভিন্ন উপায়ে জরুরি কল শুরু করা যায়, যার মধ্যে রয়েছে:
- স্বতন্ত্র ই-কল সমাধান
- IVI-তে সমন্বিত eCall সমাধান
- যখন কোনো অন্তর্নির্মিত সিস্টেম উপলব্ধ থাকে না, তখন একটি সংযুক্ত ব্লুটুথ ফোনের উপর নির্ভর করা।
একটি জরুরি কল সংযোগ করুন
যদিও ই-কল (eCall) সরঞ্জাম নিরাপত্তার জন্য অত্যন্ত গুরুত্বপূর্ণ, এটি বর্তমানে অ্যান্ড্রয়েডে সমন্বিত নয়। অ্যান্ড্রয়েডের মাধ্যমে জরুরি কলিং বৈশিষ্ট্যগুলো উপলব্ধ করতে কানেকশনসার্ভিস (ConnectionService) ব্যবহার করা সম্ভব, যার আরেকটি সুবিধা হলো জরুরি কলের জন্য অ্যাক্সেসিবিলিটি অপশন যুক্ত করা। আরও জানতে, ‘বিল্ডিং এ কলিং অ্যাপ’ দেখুন।
একটি জরুরি 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); } }
জরুরি কলের জন্য ব্লুটুথ চালু করুন।
অ্যান্ড্রয়েড ১০-এর আগে জরুরি নম্বরে কল করার জন্য ফোন থেকে সরাসরি ডায়াল করতে হতো এবং উপলব্ধ থাকলে বিশেষ ব্যবস্থা (যেমন, বিপদ শনাক্তকরণ বা ব্যবহারকারীর কোনো কার্যকলাপের ওপর ভিত্তি করে স্বয়ংক্রিয়ভাবে চালু হওয়া) ব্যবহার করতে হতো। অ্যান্ড্রয়েড ১০ এবং এর পরবর্তী সংস্করণগুলোতে, গাড়ির ডায়ালার সরাসরি জরুরি নম্বরে কল করতে পারে, তবে শর্ত হলো apps/Bluetooth/res/values/config.xml ফাইলে MAXIMUM_CONNECTED_DEVICES থাকতে হবে।
<!-- 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 একমুখী এবং তাই যেকোনো ডিভাইসে সংযোগ স্থাপনের জন্য IVI-এর প্রয়োজন হয়। PbapClientService এ থাকা MAXIMUM_CONNECTED_DEVICES IVI-এর সাথে অনুমোদিত সর্বাধিক সংখ্যক একযোগে PBAP ডিভাইস সংযোগ নির্ধারণ করে। PBAP ক্লায়েন্ট প্রতিটি সংযুক্ত ডিভাইসের কন্টাক্টগুলো Contacts Provider- এ সংরক্ষণ করে, যা পরবর্তীতে যেকোনো অ্যাপ প্রতিটি ডিভাইসের ফোনবুক তৈরি করার জন্য অ্যাক্সেস করতে পারে।
এছাড়াও, সংযোগ স্থাপনের জন্য প্রোফাইল সংযোগটি অবশ্যই IVI এবং মোবাইল ডিভাইস উভয় দ্বারা অনুমোদিত হতে হবে। যখন কোনো PBAP ক্লায়েন্ট সংযোগ বিচ্ছিন্ন করে, তখন অভ্যন্তরীণ ডেটাবেস পূর্বে সংযুক্ত ডিভাইসটির সাথে যুক্ত সমস্ত পরিচিতি এবং কল হিস্ট্রি মুছে ফেলে।
বার্তা অ্যাক্সেস প্রোফাইল
ব্লুটুথ মেসেজ অ্যাক্সেস প্রোফাইল (MAP) যানবাহনটিকে একটি সংযুক্ত রিমোট ডিভাইসের মাধ্যমে এসএমএস বার্তা পাঠাতে এবং গ্রহণ করতে দেয়। বর্তমানে, বার্তাগুলো IVI-তে স্থানীয়ভাবে সংরক্ষিত হয় না। এর পরিবর্তে, যখনই সংযুক্ত রিমোট ডিভাইসটি কোনো বার্তা গ্রহণ করে, IVI বার্তাটি গ্রহণ ও বিশ্লেষণ করে এবং এর বিষয়বস্তু একটি Intent ইনস্ট্যান্সে সম্প্রচার করে, যা পরবর্তীতে কোনো অ্যাপ দ্বারা গ্রহণ করা যায়।
বার্তা পাঠানো ও গ্রহণ করার উদ্দেশ্যে কোনো মোবাইল ডিভাইসের সাথে সংযোগ স্থাপন করতে হলে, IVI-কে অবশ্যই MAP সংযোগটি শুরু করতে হবে। MapClientService এর MAXIMUM_CONNECTED_DEVICES IVI-এর সাথে অনুমোদিত সর্বাধিক সংখ্যক একযোগে MAP ডিভাইস সংযোগ নির্ধারণ করে। বার্তা স্থানান্তরের আগে প্রতিটি সংযোগ অবশ্যই IVI এবং মোবাইল ডিভাইস দ্বারা অনুমোদিত হতে হবে।
উন্নত অডিও বিতরণ প্রোফাইল
ব্লুটুথ অ্যাডভান্সড অডিও ডিস্ট্রিবিউশন প্রোফাইল (A2DP) যানবাহনটিকে সংযুক্ত দূরবর্তী ডিভাইস থেকে অডিও স্ট্রিম গ্রহণ করতে সক্ষম করে।
অন্যান্য প্রোফাইলের মতো নয়, সংযুক্ত A2DP ডিভাইসের সর্বোচ্চ সংখ্যা জাভাতে নয়, বরং নেটিভ স্ট্যাকে প্রয়োগ করা হয়। বর্তমানে packages/modules/Bluetooth/system/btif/src/btif_av.cc ফাইলে থাকা kDefaultMaxConnectedAudioDevices ভেরিয়েবল ব্যবহার করে এই মানটি 1 এ হার্ডকোড করা আছে।
অডিও/ভিডিও রিমোট কন্ট্রোল প্রোফাইল
ব্লুটুথ অডিও/ভিডিও রিমোট কন্ট্রোল প্রোফাইল (AVRCP) গাড়িটিকে একটি সংযুক্ত রিমোট ডিভাইসের মিডিয়া প্লেয়ার নিয়ন্ত্রণ ও ব্রাউজ করার সুযোগ দেয়। যেহেতু IVI একটি AVRCP কন্ট্রোলারের ভূমিকা পালন করে, তাই অডিও প্লেব্যাককে প্রভাবিত করে এমন যেকোনো নিয়ন্ত্রিত কার্যকলাপ টার্গেট ডিভাইসের সাথে একটি A2DP সংযোগের উপর নির্ভর করে।
অ্যান্ড্রয়েড ফোনের কোনো নির্দিষ্ট মিডিয়া প্লেয়ারকে AVRCP-এর মাধ্যমে IVI দ্বারা ব্রাউজযোগ্য করতে হলে, ফোনের মিডিয়া অ্যাপটিকে অবশ্যই একটি MediaBrowserService প্রদান করতে হবে এবং com.android.bluetooth সেই সার্ভিসটি অ্যাক্সেস করার অনুমতি দিতে হবে। একটি মিডিয়া ব্রাউজার সার্ভিস তৈরি করা অংশে এটি কীভাবে করতে হয় তা বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।