يوفر Android ميزة Bluetooth كاملة التنفيذ مع دعم العديد من الملفات الشخصية الشائعة للبلوتوث داخل السيارة. هناك أيضًا والعديد من التحسينات التي تعمل على تحسين الأداء والتجربة مع الأجهزة الأخرى
إدارة اتصال البلوتوث
في Android، تحافظ CarBluetoothService على أولوية أجهزة المستخدِم الحالي التي تتضمّن بلوتوث. لكل اتصال ملف شخصي بمعلومات IVI. يتم ربط الأجهزة بالملفات الشخصية في ترتيب الأولوية المحدد. الحالات التي يمكن فيها تفعيل أو إيقاف أو ربط الأجهزة بملف شخصي تستند إليه سياسة اتصال تلقائية يمكن تجاوزها باستخدام تراكب الموارد، إذا ما يريده.
ضبط إدارة ربط السيارات
إيقاف سياسة الهاتف التلقائية
تحتفظ حزمة بلوتوث Android بسياسة اتصال للهواتف التي يتم تفعيلها من خلال
الافتراضي. يجب إيقاف هذه السياسة على جهازك كي لا تتعارض مع
سياسة السيارات المقصودة في
CarBluetoothService وفي حين أن تراكب منتج "سيارة" يجب أن تتولى هذا الأمر عنك،
يمكنك إيقاف سياسة الهاتف في
تراكب الموارد عن طريق ضبط enable_phone_policy
على false
في
MAXIMUM_CONNECTED_DEVICES
في
/packages/apps/Bluetooth/res/values/config.xml
.
استخدام السياسة التلقائية للسيارات
تحتفظ CarBluetoothService بأذونات الملف الشخصي التلقائية. تعتمد قائمة
الأجهزة وأولويات إعادة ربط الملف الشخصي بها
service/src/com/android/car/BluetoothProfileDeviceManager.java
يمكنك أيضًا العثور على سياسة إدارة اتصال البلوتوث في
service/src/com/android/car/BluetoothDeviceConnectionPolicy.java
. بشكل افتراضي،
تحدِّد هذه السياسة الحالات التي يجب فيها ربط البلوتوث وقطع الاتصال به.
الأجهزة. وتدير أيضًا الحالات الخاصة بالسيارة للحالات التي يجب فيها تشغيل المحوّل
إنشاء سياستك المخصّصة لإدارة ربط السيارات
إذا لم تكن السياسة التلقائية المتعلقة بالسيارات كافية لتلبية احتياجاتك، يمكن أيضًا إيقافها. لصالح سياستك المخصصة. إنّ سياستك المخصّصة مسؤولة على الأقل لتحديد وقت تفعيل وإيقاف محوّل البلوتوث، إلى جانب تحديد الوقت المناسب وتوصيل الأجهزة. من الممكن استخدام مجموعة متنوعة من الأحداث لتفعيل/إيقاف البلوتوث. لبدء اتصالات الجهاز، بما في ذلك الأحداث الناتجة عن تغييرات في وخصائص السيارة.
إيقاف السياسة التلقائية للسيارات
أولاً، لاستخدام سياسة مخصصة، يجب إيقاف السياسة التلقائية للسيارات من خلال
جارٍ ضبط useDefaultBluetoothConnectionPolicy
على false
في
تراكب الموارد.
تم تعريف هذا المورد في الأصل كجزء من
MAXIMUM_CONNECTED_DEVICES
في
packages/services/Car/service/res/values/config.xml
.
تفعيل وإيقاف محوّل البلوتوث
تتمثل إحدى الوظائف الأساسية للسياسة في تشغيل محوّل البلوتوث وإيقافه في
في الأوقات المناسبة. يمكنك استخدام BluetoothAdapter.enable()
BluetoothAdapter.disable()
واجهات برمجة التطبيقات لإطار العمل لتفعيل المحوّل وإيقافه.
ويجب أن تراعي هذه المكالمات الحالة المستمرة التي اختارها المستخدم من خلال "الإعدادات" أو
وأي وسيلة أخرى. وفي ما يلي طريقة للقيام بذلك:
/** * 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); }
تحديد وقت تشغيل محوّل البلوتوث وإيقافه
وبفضل سياستك المخصصة، لك مطلق الحرية في تحديد الأحداث التي تشير إلى أفضل الأوقات
لتمكين المحوّل وتعطيله. إحدى الطرق للقيام بذلك هي استخدام حالات القوة
MAXIMUM_CONNECTED_DEVICES
بوصة
CarPowerManager
:
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()
الذي
تواصل توصيل الأجهزة بناءً على قوائم الأولوية المحددة لكل ملف شخصي للبلوتوث.
وأحد الأمثلة على الحالات التي قد تريد فيها إجراء ذلك هو تشغيل محول البلوتوث:
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 والتحقّق من اتصاله تلقائيًا بالأجهزة الصحيحة في بالترتيب المناسب. يمكنك تبديل محول البلوتوث من خلال واجهة مستخدم الإعدادات، أو باستخدام أوامر 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
وأخيرًا، في حال وضع سياسة خاصة بالسيارات، يُرجى التحقّق من أي ربط مخصّص. التحكم في الأحداث التي اخترتها لتشغيل الجهاز الاتصالات.
الملفات الشخصية لميزة بلوتوث في السيارات
وفي نظام Android، يمكن أن يدعم IVI أجهزة متعددة متصلة في وقت واحد عبر البلوتوث. تتيح خدمات الهاتف المستندة إلى بلوتوث والمتوفّرة للمستخدمين إمكانية الاتصال أجهزة منفصلة بالتزامن، مثل هاتف شخصي وهاتف عمل، وإعداد إجراء مكالمات بدون لمس الجهاز من أي من الجهازين.
يتم فرض حدود الاتصال من قِبل كل ملف شخصي فردي على بلوتوث، وعادةً ما يكون ضمن لخدمة الملف الشخصي نفسها. بشكل افتراضي، ولا تصدر CarBluetoothService أي آراء أخرى بشأن الحدّ الأقصى لعدد الأجهزة المتصلة الأجهزة المسموح بها.
ملف تعريف بدون لمس الجهاز
يُتيح ملف تعريف البلوتوث بدون لمس الجهاز (HFP) للمركبة صنع الهاتف واستلامه. عبر جهاز بعيد متصل. يتم تسجيل هاتف منفصل من خلال كل عملية اتصال بالجهاز بحساب في TelecomManager، التي تعلن عن أي حسابات هاتف متاحة لتطبيقات IVI.
يمكن لجهاز IVI الاتصال بأجهزة متعددة عبر HFP. MAX_STATE_MACHINES_POSSIBLE
تحدد السمة MAXIMUM_CONNECTED_DEVICES
في
HeadsetClientService
الحد الأقصى لعدد مرات HFP المتزامنة
الاتصالات.
عندما يجري مستخدم مكالمة هاتفية أو يستقبلها من أحد الأجهزة، يستخدم
حساب هاتف ينشئ عنصر HfpClientConnection
. تطبيق Dialer
تتفاعل مع عنصر HfpClientConnection
لإدارة المكالمة
الميزات الجديدة، مثل قبول مكالمة أو إنهاء المكالمة.
تجدر الإشارة إلى أن تطبيق Dialer الافتراضي لا يتيح استخدام مقاطع متعددة في وقت واحد
أجهزة HFP المتصلة. لتنفيذ HFP متعدد الأجهزة، يجب تخصيصه
للسماح للمستخدمين باختيار حساب الجهاز الذي سيتم استخدامه عند إجراء مكالمة. يعمل التطبيق بعد ذلك
يتصل بـ telecomManager.placeCall
باستخدام الحساب الصحيح. عليك إجراء ما يلي:
التحقق من أنّ الوظائف الأخرى المصمّمة لأجهزة متعدّدة تعمل على النحو المنشود
إثبات ملكية HFP لأجهزة متعددة
للتأكّد من أنّ إمكانية الاتصال من خلال أجهزة متعدّدة تعمل بشكل صحيح عبر البلوتوث، اتّبِع الخطوات التالية:
- باستخدام البلوتوث، يمكنك توصيل جهاز بجهاز IVI وبث الصوت من الخاص بك.
- توصيل هاتفَين بجهاز IVI عبر البلوتوث
- اختَر هاتفًا واحدًا. يمكنك إجراء مكالمة صادرة من الهاتف مباشرةً
وإجراء مكالمة صادرة باستخدام IVI.
- التأكد في المرتين من توقف الصوت الذي يتم بثه مؤقتًا ومن صوت الهاتف يتم تشغيله عبر مكبّرات صوت IVI المتصلة
- باستخدام الهاتف نفسه، تتلقى مكالمة واردة مباشرةً على الهاتف،
تلقي مكالمة واردة باستخدام IVI.
- في المرتين، تحقق من الإيقاف المؤقت للصوت الذي يتم بثه يتم تشغيل صوت الهاتف عبر مكبرات صوت IVI المتصلة.
- كرِّر الخطوتين 3 و4 مع الهاتف الآخر المتصل.
مكالمات الطوارئ
تعد القدرة على إجراء مكالمات الطوارئ جانبًا مهمًا من الاتصال الهاتفي وظائف البلوتوث في السيارة هناك عدة طرق يمكن من خلالها إجراء مكالمة طوارئ من IVI، بما في ذلك:
- حل eCall مستقل
- حلّ eCall مدمج في IVI
- الاعتماد على هاتف متصل بالبلوتوث عندما لا يتوفر نظام مدمج
إجراء مكالمة طوارئ
على الرغم من أهمية أجهزة eCall في الأمان، إلا أنّها غير مضمّنة حاليًا في Android. من الممكن استخدام ConnectionService لعرض ميزات مكالمات الطوارئ من خلال 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); } }
تفعيل البلوتوث لمكالمات الطوارئ
الاتصال بالطوارئ قبل أن يتضمن نظام Android 10 الاتصال المباشر من الهاتف والاستدعاء
معدات خاصة إذا كانت متوفرة (على سبيل المثال، التشغيل التلقائي عند الكشف عن الخطر أو
إجراء المستخدم). في نظام التشغيل Android 10 والإصدارات الأحدث، يمكن لبرنامج Dialer في السيارة الاتصال مباشرةً
رقم الطوارئ، بشرط أن يكون هذا 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 أحادي الاتجاه، وبالتالي يتطلب من IVI إنشاء مثيل للاتصالات
MAXIMUM_CONNECTED_DEVICES
بوصة
يحدد
PbapClientService
الحد الأقصى لعدد أجهزة PBAP المتزامنة
الاتصالات المسموح بها مع IVI. يخزِّن عميل PBAP جهات الاتصال لكل
جهاز متصل في
مقدِّم جهات الاتصال الذي يمكن الوصول إليه بعد ذلك باستخدام تطبيق لاستخراج الهاتف
حجزها لكل جهاز.
بالإضافة إلى ذلك، يجب أن يتم تفويض ربط الملف الشخصي من خلال كل من IVI الجهاز المحمول من أجل إجراء الاتصال. عندما ينقطع اتصال عميل PBAP، تزيل قاعدة البيانات الداخلية جميع جهات الاتصال وسجل المكالمات المرتبط الجهاز المتصل مسبقًا.
الملف الشخصي للوصول إلى الرسائل
يُتيح ملف تعريف الوصول إلى الرسائل عبر البلوتوث (MAP) للمركبة إرسال الرسائل القصيرة واستلامها. الرسائل عبر جهاز بعيد متصل. في الوقت الحالي، لا يتم تخزين الرسائل محليًا على IVI. فعندما يتلقى الجهاز البعيد المتصل رسالة، فإن واجهة برمجة التطبيقات IVI لتلقي الرسالة وتحليلها وبث محتواها في مثيل Intent والذي يمكن استلامه بعد ذلك بواسطة التطبيق.
من أجل الاتصال بجهاز محمول لغرض إرسال واستلام
يجب على IVI بدء اتصال MAP.
MAXIMUM_CONNECTED_DEVICES
في
MapClientService
تحدد الحد الأقصى لعدد أجهزة MAP المتزامنة
الاتصالات المسموح بها مع IVI. يجب أن يتم تفويض كل عملية اتصال من قِبل IVI
الجهاز الجوال قبل نقل الرسائل.
الملف الشخصي المتقدم لتوزيع الصوت
يُتيح ملف تعريف التوزيع المتقدم للصوت عبر البلوتوث (A2DP) للمركبة باستقبال عمليات البث الصوتي من جهاز بعيد متصل.
على عكس الملفات الشخصية الأخرى، يتم فرض الحد الأقصى لعدد أجهزة A2DP المتصلة في
المكدس الأصلي وليس في Java. القيمة ثابتة حاليًا في الترميز 1
باستخدام
المتغير kDefaultMaxConnectedAudioDevices
في
packages/modules/Bluetooth/system/btif/src/btif_av.cc
ملف تعريف التحكم عن بُعد في الصوت/الفيديو
يسمح ملف التحكم عن بُعد في الصوت/الفيديو عبر البلوتوث (AVRCP) للمركبة بالتحكم في وتصفح مشغّلات الوسائط على جهاز بعيد متصل. بما أن IVI يلعب دور وحدة تحكم AVRCP، أي عناصر تحكم يتم تشغيلها تؤثر في تشغيل الصوت تعتمد على A2DP الاتصال بالجهاز المستهدف.
بالنسبة إلى مشغّل وسائط معيّن على هاتف Android ليكون قابلاً للتصفّح من خلال بروتوكول IVI عبر AVRCP، يجب اتّباع الخطوات التالية:
يجب أن يوفر تطبيق الوسائط على الهاتف
MediaBrowserService
والسماح لـ "com.android.bluetooth
" بالوصول إلى
تلك الخدمة.
ويوضّح إنشاء خدمة متصفِّح للوسائط كيفية إجراء ذلك بالتفصيل.