Bluetooth

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:

  1. Bluetooth'u kullanarak, bir cihazı IVI\'ye bağlayın ve olanak tanır.
  2. İki telefonu Bluetooth üzerinden IVI'ya bağlayın.
  3. Bir telefon seçin. Doğrudan telefondan giden bir çağrı yapma, ve IVI'yı kullanarak bir giden arama yapın.
    1. İki kere de yayındaki ses duraklatmalarını ve telefon sesini doğrulayın. IVI bağlı hoparlörlerden çalınır.
  4. Aynı telefonu kullanarak, gelen bir aramayı doğrudan telefona alma ve IVI'yı kullanarak gelen bir aramayı alabilir.
    1. Her iki seferde de ses akışı duraklatmalarını ve telefonun sesi IVI bağlı hoparlörlerden çalınır.
  5. 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.