Bu kılavuzda, uygulamanız arka planda çalışırken çevre birimleri ile iletişim kurmayla ilgili temel kullanım alanlarının nasıl destekleneceğine dair genel bilgiler verilmektedir:
Bu kullanım alanlarının her birini desteklemek için birden fazla seçenek vardır. Her birinin, belirli ihtiyaçlarınıza daha fazla veya daha az uygun olmasını sağlayabilecek avantajları ve dezavantajları vardır.
Aşağıdaki şemada, bu sayfadaki bilgilerin basitleştirilmiş bir görünümü gösterilmektedir:
Cihaz bulun
Öncelikle uygulamanızın bağlanacağı bir cihaz bulması gerekir. BLE cihaz bulmak için aşağıdaki API'lerden birini kullanabilirsiniz:
- BLE cihazlarını bulma bölümünde açıklandığı gibi
BluetoothLeScanner
. (Örnek) - Eşlik eden cihaz eşleme bölümünde açıklandığı şekilde
CompanionDeviceManager
(Örnek)
Arka planda
Uygulama görünür değilken bu API'lerden herhangi birinin kullanılmasıyla ilgili bir sınırlama yoktur ancak her ikisinin de uygulama işleminizin etkin olması gerekir. Uygulama işlemi çalışmıyorsa aşağıdaki geçici çözümleri kullanabilirsiniz:
BluetoothLeScanner
için: Filtreniz eşleşen bir cihaz tarandığında bildirim almak içinScanCallback
nesnesi yerinePendingIntent
nesnesi ilestartScan()
işlevini çağırın. (Örnek)CompanionDeviceManager
için: Uygulamayı uyandırıp daha önce ilişkilendirilmiş bir cihaz menzildeyken uyanık tutmak üzere Tamamlayıcı uygulamaları uyanık tutma başlıklı makaledeki talimatları uygulayın. (Örnek)
Bir cihaza bağlan
Bulduğunuz bir cihaza bağlanmak için aşağıdaki kaynaklardan birinde cihazın BluetoothDevice
örneğini almanız gerekir:
- Önceki bölümde açıklandığı şekilde bir
BluetoothLeScanner
tarama sonucu. BluetoothAdapter.getBondedDevices()
kaynağından alınan bağlı cihaz listesi.BluetoothAdapter.getRemoteLeDevice()
kullanılarak oluşturulanBluetoothAdapter
önbelleği.
Bir BluetoothDevice
örneği oluşturduktan sonra, connectGatt()
yöntemlerinden birini çağırarak ilgili cihaza bağlantı isteği gönderebilirsiniz. autoConnect
boole değerine ilettiğiniz değer, GATT istemcisinin aşağıdaki iki bağlantı modundan hangisini kullanacağını tanımlar:
- Doğrudan bağlantı (
autoconnect = false
): Çevresel cihaza doğrudan bağlanmayı deneyin ve cihaz kullanılamıyorsa bağlantıyı sonlandırın. Bağlantı kesilirse GATT istemcisi otomatik olarak yeniden bağlanmaya çalışmaz. - Otomatik bağlan (
autoconnect = true
): Mümkün olduğunda çevre birimi cihaza otomatik olarak bağlanmayı deneyin. Çevresel birim tarafından başlatılan veya çevresel birim kapsama alanında olmadığı için bağlantı kesilirse GATT istemcisi, çevresel birim kullanılabilir olduğunda otomatik olarak yeniden bağlanmaya çalışır.
Arka planda
Uygulama arka plandayken cihaza bağlanma konusunda herhangi bir kısıtlama yoktur ancak işleminiz sonlandırılırsa bağlantı kapatılır. Ayrıca, arka planda etkinlik başlatma (Android 10 ve sonraki sürümlerde) veya ön plan hizmetleri (Android 12 ve sonraki sürümlerde) ile ilgili kısıtlamalar vardır.
Bu nedenle, arka planda bağlantı kurmak için uygulamalar aşağıdaki çözümleri kullanabilir:
- Cihazınıza bağlanmak için WorkManager'ı kullanın.
- Uygulama kısıtlamaları geçerli olsa da tanımlanmış bir işlemi gerçekleştirmek için
PeriodicWorkRequest
veyaOneTimeWorkRequest
ayarlayabilirsiniz. - Ayrıca iş kısıtlamaları, hızlandırılmış iş, yeniden deneme politikası gibi WorkManager özelliklerinden de yararlanabilirsiniz.
- Veri senkronizasyonu veya çevre birimleri tarafından anket yapılması gibi bir görevi gerçekleştirmek için bağlantının mümkün olduğunca uzun süre açık kalması gerekiyorsa Uzun süre çalışan işleyiciler için destek başlıklı makaledeki talimatları uygulayarak bir ön plan hizmeti başlatmanız gerekir. Ancak ön plan hizmeti başlatma kısıtlamaları Android 12'den itibaren geçerlidir.
- Uygulama kısıtlamaları geçerli olsa da tanımlanmış bir işlemi gerçekleştirmek için
connectedDevice
türüne sahip bir ön plan hizmeti başlatın.- Veri senkronizasyonu veya çevre birimleri tarafından anket yapılması gibi bir görevi gerçekleştirmek için bağlantının mümkün olduğunca uzun süre açık kalması gerekiyorsa Uzun süre çalışan işleyiciler için destek başlıklı makaledeki talimatları uygulayarak bir ön plan hizmeti başlatmanız gerekir. Ancak ön plan hizmeti başlatma kısıtlamaları Android 12'den itibaren geçerlidir.
- Cihaz mevcut olduğunda işleminizi uyandırmak için Cihaz bulma bölümünde açıklandığı gibi
startScan()
öğesini birPendingIntent
nesnesi ile çağırın. Çevresel cihaz reklam yayınlıyor olmalıdır.- Bir Worker ve Job başlatmanızı öneririz. Bu işlem sistem tarafından kesintiye uğrayabileceğinden yalnızca kısa süreli iletişimi destekleyebilir.
- Android 12'den önceki sürümlerde doğrudan
PendingIntent
nesnesinden ön plan hizmeti başlatabilirsiniz.
- Hizmeti arka plandan başlatmak için
CompanionDeviceService
veREQUEST_COMPANION_RUN_IN_BACKGROUND
veyaREQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND
izinlerinden birini kullanın.
Bir cihaza bağlı kalma
İdeal olarak, uygulamalar çevre birimi cihazlarla bağlantılarını yalnızca gerektiği sürece sürdürmeli ve görev tamamlandıktan sonra bağlantıyı kesmelidir. Ancak bir uygulamanın bağlantıyı süresiz olarak açık tutması gerekebileceği iki durum vardır:
Her iki durumda da aşağıdaki seçenekler kullanılabilir:
REQUEST_COMPANION_RUN_IN_BACKGROUND
iznine veCompanionDeviceManager.startObservingDevicePresence()
yöntemine sahipCompanionDeviceService
kullanın.- Uygulama ön plandayken (veya istisnalardan birindeyken)
connectedDevice
ön plan türüne sahip bir ön plan hizmeti başlatma.
Uygulamalar arasında geçiş yaparken
Cihaz bulmak, ona bağlanmak ve veri aktarmak zaman alıcı ve yoğun kaynak gerektiren bir işlemdir. Bağlantıyı kaybetmemek ve kullanıcı uygulamalar arasında geçiş yaptığında veya eşzamanlı görevler gerçekleştirdiğinde işlemin tamamını tekrarlamak zorunda kalmamak için işlem tamamlanana kadar bağlantıyı açık tutmanız gerekir. connectedDevice
türüne sahip bir ön plan hizmeti veya companion device presence API'yi kullanabilirsiniz.
Çevre birimi bildirimlerini dinlerken
Uygulama, çevre birimi bildirimlerini dinlemek için setCharacteristicNotification()
çağrısını yapmalıdır, onCharacteristicChanged()
kullanarak geri çağırma çağrılarını dinlemelidir ve bağlantıyı açık tutmalıdır. Çoğu uygulamada, uygulamanın uzun süre boyunca dinlemeye devam etmesi gerekeceğinden bu kullanım alanını CompanionDeviceService
ile desteklemek en iyisidir. Bununla birlikte, ön plan hizmeti de kullanabilirsiniz.
Her iki durumda da, Cihaza bağlanma bölümündeki talimatları uygulayarak sonlandırılan bir işlemden sonra yeniden bağlanabilirsiniz.