Android, Bluetooth ile tam bir Bluetooth yaygın olarak kullanılan birçok araba içi Bluetooth profilinin desteğiyle birlikte çalışır. Bir de performansı ve deneyimi iyileştiren diğer cihazlar ve kullanıma sunuyoruz.
Bluetooth bağlantı yönetimi
Android'de, CarBluetoothService, mevcut kullanıcının Bluetooth cihazlarını ve önceliğini korur ayrı ayrı listeler oluşturabilirsiniz. Cihazlar, tanımlanmış öncelik sırası. Cihazların ne zaman etkinleştirileceği, devre dışı bırakılacağı ve bir profile bağlanacağı zaman: kaynak yer paylaşımı, gerekir.
Otomotiv bağlantı yönetimini yapılandırma
Varsayılan telefon politikasını devre dışı bırakın
Android Bluetooth yığını,
varsayılandır. Bu politikanın,
amaçlanan otomotiv politikası
CarBluetoothService hizmetinde mevcut bir sorun yoktur. Araba ürün yer paylaşımı bunu sizin yerinize halledecek olsa da
telefon politikasını
kaynak yer paylaşımı ayarlamak için enable_phone_policy
ayarını false
olarak ayarlayın.
/packages/apps/Bluetooth/res/values/config.xml
içinde MAXIMUM_CONNECTED_DEVICES
.
Varsayılan otomotiv politikasını kullan
CarBluetoothService, varsayılan profil izinlerini korur. Bilinenlerin listesi
ve profillerinin yeniden bağlanma öncelikleri
service/src/com/android/car/BluetoothProfileDeviceManager.java
Ayrıca, Bluetooth bağlantı yönetimi politikası
service/src/com/android/car/BluetoothDeviceConnectionPolicy.java
ürününde de bulunabilir. Varsayılan olarak
bu politika, Bluetooth'un bağlı ağa bağlanması ve bağlı olan bağlantısının kesilmesi gereken örnekleri tanımlar
cihazlar. Ayrıca adaptörün açık olması gereken ve ayrıca,
kapalı.
Kendi özel otomotiv bağlantı yönetimi politikanızı oluşturma
Varsayılan otomotiv politikası ihtiyaçlarınız için yeterli değilse devre dışı da bırakılabilir koruyabilirsiniz. En azından özel politikanız, Bluetooth adaptörünün ne zaman etkinleştirilip devre dışı bırakılacağının yanı sıra cihazları bağlayabilirsiniz. Bluetooth'u etkinleştirmek/devre dışı bırakmak için çeşitli etkinlikler kullanmak mümkündür bağdaştırıcıdaki değişikliklere bağlı olarak gerçekleşen etkinlikler dahil olmak üzere, cihaz bağlantılarını başlatmak için araba özellikleri olduğundan emin olun.
Varsayılan otomotiv politikasını devre dışı bırak
Öncelikle, özel bir politika kullanmak için varsayılan otomotiv politikasının şu tarihe kadar devre dışı bırakılması gerekir:
useDefaultBluetoothConnectionPolicy
ayarını false
olarak
kaynak yer paylaşımı.
Bu kaynak, şu anın bir parçası olarak tanımlanır:
packages/services/Car/service/res/values/config.xml
içinde MAXIMUM_CONNECTED_DEVICES
.
Bluetooth adaptörü etkinleştirme ve devre dışı bırakma
Politikanızın temel işlevlerinden biri, Bluetooth adaptörünü şuradan açıp kapatmaktır:
uygun zamanlara ekleyebilirsiniz. BluetoothAdapter.enable()
ve
Bağdaştırıcıyı etkinleştirmek ve devre dışı bırakmak için BluetoothAdapter.disable()
çerçeve API'leri.
Bu çağrılar, kullanıcının Ayarlar veya
başka şekilde iletişim kuramazsınız. Bunu aşağıdaki şekilde yapabilirsiniz:
/** * 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); }
Bluetooth adaptörünün ne zaman açılıp kapanacağını belirleme
Özel politikanız sayesinde, seçtiğiniz etkinlikler için en uygun zamanları belirleyebilirsiniz.
bağdaştırıcıyı etkinleştirin ve devre dışı bırakın. Bunu yapmanın bir yolu,
MAXIMUM_CONNECTED_DEVICES
inç
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; } } };
Cihazların ne zaman bağlanacağını belirleyin
Benzer bir şekilde,
başlangıç,
CarBluetoothManager, aşağıdaki özelliklere sahip connectDevices()
API çağrısını sağlar:
her Bluetooth profili için tanımlanan öncelik listelerine göre cihazları bağlamaya devam eder.
Bunu yapmak isteyebileceğiniz durumlara örnek olarak Bluetooth adaptörünün her açılışı verilebilir:
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(); } } } }
Otomotiv bağlantı yönetimini doğrulayın
Bağlantı politikanızın davranışını doğrulamanın en kolay yolu, IVI'nızı kontrol edin ve otomatik olarak doğru cihazlara bağlandığını emin olmanız gerekir. Bluetooth adaptörünü ayarlar arayüzünden veya aşağıdaki adb komutlarını ekleyin:
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
Ayrıca, hata ayıklama bilgilerini görmek için aşağıdaki komutun çıkışı kullanılabilir. Bluetooth bağlantılarıyla ilgili:
adb shell dumpsys car_service
Son olarak, kendi otomotiv politikanızı oluşturduysanız, ilgili tüm özel bağlantıları davranışı, cihazı tetiklemesi için seçtiğiniz etkinliklerin kontrol edilmesini gerektirir bağlantılar.
Otomotiv Bluetooth profilleri
Android'de IVI, aynı anda bağlanan birden fazla cihazı destekleyebilir veya Bluetooth üzerinden bağlanıyor. Birden fazla cihazda Bluetooth telefon hizmetleri, kullanıcıların bağlantı kurmasına olanak tanır Aynı anda ayrı cihazlar (örneğin, kişisel telefon ve iş telefonu) yapabilir ve ellerinizi kullanmadan çağrı yapabilirsiniz.
Bağlantı sınırları, her Bluetooth profili tarafından uygulanır. Bu genellikle profil hizmetinin uygulanması. Varsayılan olarak CarBluetoothService, maksimum bağlı cihaz sayısıyla ilgili başka bir değer vermez. cihaza izin verildi.
Eller Serbest Profili
Bluetooth Eller Serbest Profili (HFP), aracın telefon oluşturup almasına olanak tanır bağlı bir uzak cihazla arama yapabilirsiniz. Her cihaz bağlantısı ayrı bir telefonu kaydeder ile hesap TelecomManager kullanarak mevcut telefon hesaplarını IVI uygulamalarına tanıtır.
IVI, HFP aracılığıyla birden fazla cihaza bağlanabilir. MAX_STATE_MACHINES_POSSIBLE
.
HeadsetClientService
yerel ayarındaki MAXIMUM_CONNECTED_DEVICES
, aynı anda yapılan maksimum yüksek yağ, şeker veya tuz oranını tanımlar
bağlantılar.
Bir kullanıcı bir cihazdan telefon araması aldığında veya aldığında,
telefon hesabı, bir HfpClientConnection
nesnesi oluşturur. Çevirici uygulaması
çağrıyı yönetmek için HfpClientConnection
nesnesiyle etkileşimde bulunur
çağrı kabul etme veya sonlandırma gibi özellikleri kullanabilirsiniz.
Varsayılan Çevirici uygulamasının aynı anda birden fazla uygulamayı desteklemediğine dikkat edin.
bağlı HFP cihazları. Birden fazla cihazda HFP uygulamak için özelleştirme gerekir
Böylece kullanıcılar arama yaparken kullanılacak cihaz hesabını seçebilirler. Ardından, uygulama
telecomManager.placeCall
adlı cihazı doğru hesapla çağırıyor. Şunları yapmanız gerekir:
Diğer çoklu cihaz işlevlerinin de amaçlandığı şekilde çalıştığını doğrulayın.
Birden fazla cihaza ait HFP'yi doğrula
Çeşitli cihazlardan bağlantının Bluetooth üzerinden düzgün şekilde çalışıp çalışmadığını kontrol etmek için:
- Bluetooth'u kullanarak, bir cihazı IVI\'ye bağlayın ve olanak tanır.
- İki telefonu Bluetooth üzerinden IVI'ya bağlayın.
- Bir telefon seçin. Doğrudan telefondan giden bir çağrı yapma,
ve IVI'yı kullanarak bir giden arama yapın.
- İki kere de yayındaki ses duraklatmalarını ve telefon sesini doğrulayın. IVI bağlı hoparlörlerden çalınır.
- Aynı telefonu kullanarak, gelen bir aramayı doğrudan telefona alma ve
IVI'yı kullanarak gelen bir aramayı alabilir.
- Her iki seferde de ses akışı duraklatmalarını ve telefonun sesi IVI bağlı hoparlörlerden çalınır.
- Diğer bağlı telefonla 3 ve 4. adımları tekrarlayın.
Acil durum araması
Acil durum aramaları yapma imkanı, telefon ve iletişim sistemlerinin önemli bir parçasıdır. Araçta Bluetooth işlevleri. Acil durum araması birkaç şekilde aşağıdakiler dahil IVI'dan başlatılmalıdır:
- Bağımsız eCall çözümü
- IVI'ye entegre eCall çözümü
- Yerleşik sistem olmadığında bağlı bir Bluetooth telefona güvenme
Acil durum araması bağlayın
E-posta ekipmanı güvenlik açısından çok önemli olsa da şu anda Android'e entegre edilmemiştir. Android üzerinden acil durum araması özelliklerini kullanıma sunmak için ConnectionService avantajını da değerlendireceğiz. Daha fazla bilgi edinmek için bkz. Arama uygulaması oluşturma.
Aşağıda, acil durumun nasıl kurulacağına dair bir örnek verilmiştir 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); } }
Acil durum aramaları için Bluetooth'u etkinleştir
Android 10'dan önce acil durum araması, telefondan doğrudan arama ve çağrı yapma içeriyordu
özel ekipman varsa (örneğin, tehlike veya bir sistem tespit edildiğinde otomatik
kullanıcı işlemi) olabilir. Android 10 ve sonraki sürümlerde arabadaki Çevirici doğrudan bir
acil durum numarası (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>
Acil durum aramasını bu şekilde uygulayarak ses tanıma gibi diğer uygulamalar acil durum numarasını da arayın.
Telefon Rezervasyonu Erişim Profili
Bluetooth Telefon Rehberi Erişim Profili (PBAP), kişileri ve arama geçmişlerini indirir uzaktaki bir cihazdan oturum açın. PBAP, her bir iş ortağının dahil olduğu PBAP istemci durumu makinesi tarafından güncellenen kişilere uygulanır. Her bağlı cihaz ayrı bir PBAP istemci durumu makinesiyle etkileşime girer ve bunun sonucunda kişilerin doğru cihazla ilişkilendirilir.
PBAP tek yönlüdür ve bu nedenle PBAP'nin PBAP'nin
MAXIMUM_CONNECTED_DEVICES
inç
PbapClientService
, maksimum eşzamanlı PBAP cihazı sayısını tanımlar
IVI ile bağlantılara izin veriliyor. PBAP istemcisi her kart için kişileri depolar
bağlı cihazın
Telefon numarasını elde etmek için bir uygulama tarafından erişilebilen Kişiler Sağlayıcı
her cihaz için ayrı ayrı rezervasyon yapabilirsiniz.
Ayrıca, profil bağlantısı hem IVI hem de mobil cihazdan giriş yapılması gerekir. PBAP istemcisinin bağlantısı kesildiğinde dahili veritabanı ile ilişkili tüm kişiler ve çağrı geçmişinden de kaldırılır. daha önce bağlanmış cihaz.
Mesaj Erişim Profili
Bluetooth Mesaj Erişim Profili (MAP), aracın SMS gönderip almasına olanak tanır bağlı bir uzak cihaz aracılığıyla gelen iletiler. Şu anda mesajlar yerel olarak şurada depolanmamaktadır: IVI. Bunun yerine, bağlı uzak cihaz bir ileti aldığında IVI mesajı alır, ayrıştırır ve içeriğini Intent örneği Bunlar daha sonra bir uygulama tarafından alınabilir.
Gönderme ve alma amacıyla bir mobil cihaza bağlanmak için
IVI, MAP bağlantısını başlatmalıdır.
MapClientService
içindeki MAXIMUM_CONNECTED_DEVICES
, maksimum eşzamanlı MAP cihazı sayısını tanımlıyor
IVI ile bağlantılara izin veriliyor. Her bağlantı IVI ve
mobil cihazda düzenlemelerinizi
yapmanıza olanak tanır.
Gelişmiş Ses Dağıtım Profili
Bluetooth Gelişmiş Ses Dağıtım Profili (A2DP), aracın bağlı uzak cihazdan ses akışı sağlar.
Diğer profillerin aksine, maksimum bağlı A2DP cihazı sayısı
yerel yığını belirtir. Değer şu anda 1
işlevine sabit kodlu olarak verilmiştir.
kDefaultMaxConnectedAudioDevices
değişkeni
packages/modules/Bluetooth/system/btif/src/btif_av.cc
.
Uzaktan Ses/Görüntü Uzaktan Kumanda Profili
Bluetooth Ses/Video Uzaktan Kumanda Profili (AVRCP), aracın şunları kontrol etmesini sağlar: ve bağlı uzak cihazdaki medya oynatıcılara göz atabilirsiniz. IVI, kurumun AVRCP denetleyici. Ses çalmayı etkileyen tüm tetiklenen kontroller A2DP'ye dayanır Hedef cihaza bağlanıyor.
Android telefondaki belirli bir medya oynatıcının AVRCP üzerinden IVI tarafından göz atılabilmesi için
telefondaki medya uygulaması bir
MediaBrowserService
ve com.android.bluetooth
uygulamasının şunlara erişmesine izin verin:
çok önemli bir yer tutar.
Medya tarayıcı hizmeti oluşturma bölümünde bunun nasıl yapılacağı ayrıntılı olarak açıklanmaktadır.