Bu kılavuzda, uygulamanız arka planda çalışırken çevre birimleriyle iletişim kurmak için temel kullanım alanlarını nasıl destekleyeceğinizle ilgili genel bilgiler verilmektedir:
Bu kullanım alanlarının her birini destekleyen birden fazla seçenek vardır. Her birinin, özel ihtiyaçlarınıza uygunluğunu etkileyebilecek avantajları ve dezavantajları vardır.
Aşağıdaki diyagramda, bu sayfadaki kılavuzun 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:
BluetoothLeScanner, BLE cihazlarını bulma bölümünde açıklandığı gibi. (Örnek)- Yardımcı cihaz eşleme başlıklı makalede açıklandığı şekilde
CompanionDeviceManager. (Örnek)
Arka planda
Uygulama görünür değilken bu API'lerden birini kullanma konusunda herhangi bir sınırlama yoktur ancak her ikisi de uygulama işleminizin etkin olmasını gerektirir. Uygulama işlemi çalışmıyorsa aşağıdaki geçici çözümleri kullanabilirsiniz:
BluetoothLeScanneriçin: Filtrenizle eşleşen bir cihaz tarandığında bildirim almak içinScanCallbacknesnesi yerinePendingIntentnesnesiylestartScan()yöntemini çağırın. (Örnek)CompanionDeviceManageriçin: Uygulamayı uyandırmak ve daha önce ilişkilendirilmiş bir cihaz kapsama alanındayken uyanık tutmak için Tamamlayıcı uygulamaları uyanık tutma bölümündeki talimatları uygulayın. (Örnek)
Bir cihaza bağlan
Bulduğunuz bir cihaza bağlanmak için aşağıdaki kaynaklardan birinden cihaz için bir BluetoothDevice örneği almanız gerekir:
- Önceki bölümde açıklandığı gibi bir
BluetoothLeScannertarama sonucu. - Eşlenen cihaz listesi
BluetoothAdapter.getBondedDevices()adresinden alındı. BluetoothAdapterönbelleği,BluetoothAdapter.getRemoteLeDevice()kullanılıyor.
BluetoothDevice örneğiniz olduktan sonra connectGatt() yöntemlerinden birini çağırarak ilgili cihaza bağlantı isteği başlatabilirsiniz. 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ğlan (
autoconnect = false): Çevre birimine doğrudan bağlanmaya çalışır ve cihaz kullanılamıyorsa başarısız olur. Bağlantı kesilirse GATT istemcisi otomatik olarak yeniden bağlanmaya çalışmaz. - Otomatik bağlan (
autoconnect = true): Çevre birimine her kullanılabilir olduğunda otomatik olarak bağlanmaya çalışır. Çevre birimi tarafından başlatılan veya çevre biriminin kapsama alanı dışında olması nedeniyle bağlantının kesilmesi durumunda GATT istemcisi, çevre birimi kullanılabilir olduğunda otomatik olarak yeniden bağlanmaya çalışır.
Arka planda
Uygulama arka plandayken bir 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, uygulamalar arka plandayken bağlantı kurmak için aşağıdaki çözümleri kullanabilir:
- Cihazınıza bağlanmak için WorkManager'ı kullanın.
- Tanımlı bir işlemi gerçekleştirmek için
PeriodicWorkRequestveyaOneTimeWorkRequestayarlayabilirsiniz ancak uygulama kısıtlamaları geçerli olabilir. - Ayrıca iş kısıtlamaları, yüksek öncelikli iş, yeniden deneme politikası gibi WorkManager özelliklerinden de yararlanabilirsiniz.
- Veri senkronizasyonu veya çevre birimlerinden yoklama gibi bir görevi gerçekleştirmek için bağlantının mümkün olduğunca uzun süre etkin tutulması gerekiyorsa Uzun süre çalışan işçiler için destek bölümündeki talimatları uygulayarak bir ön plan hizmeti başlatmanız gerekir. Ancak Android 12'den itibaren ön plan hizmeti başlatma kısıtlamaları geçerlidir.
- Tanımlı bir işlemi gerçekleştirmek için
connectedDevicetüründe bir ön plan hizmeti başlatma- Veri senkronizasyonu veya çevre birimlerinden yoklama gibi bir görevi gerçekleştirmek için bağlantının mümkün olduğunca uzun süre etkin tutulması gerekiyorsa Uzun süre çalışan işçiler için destek bölümündeki talimatları uygulayarak bir ön plan hizmeti başlatmanız gerekir. Ancak Android 12'den itibaren ön plan hizmeti başlatma kısıtlamaları geçerlidir.
- Cihaz mevcut olduğunda işleminizi uyandırmak için Cihaz bulma bölümünde açıklandığı gibi
startScan()nesnesiylePendingIntentyöntemini çağırın. Çevre birimi cihazı reklam yayınlıyor olmalıdır.- Bir Worker ve bir Job başlatmanızı öneririz. Bu işlem sistem tarafından kesintiye uğratılabilir ve bu nedenle yalnızca kısa süreli iletişimi destekleyebilir.
- Android 12'den önceki sürümlerde ön plan hizmetini doğrudan
PendingIntentnesnesinden başlatabilirsiniz.
- Hizmeti arka plandan başlatmak için
CompanionDeviceServiceveREQUEST_COMPANION_RUN_IN_BACKGROUNDveyaREQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUNDizinlerinden birini kullanın.
Bir cihaza bağlı kalma
İdeal olarak, uygulamalar çevre birimleriyle bağlantıları 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 canlı tutması gereken iki durum vardır:
Her iki durumda da aşağıdaki seçenekler kullanılabilir:
CompanionDeviceServiceözelliğiniREQUEST_COMPANION_RUN_IN_BACKGROUNDizni veCompanionDeviceManager.startObservingDevicePresence()yöntemiyle kullanın.- Uygulama ön plandayken (veya muafiyetlerden birinin kapsamındayken)
connectedDeviceön plan türüyle ön plan hizmeti başlatın.
Uygulamalar arasında geçiş yaparken
Cihaz bulmak, cihaza bağlanmak ve veri aktarmak zaman alıcı ve kaynak yoğun bir işlemdir. Bağlantının kesilmesini ve kullanıcı uygulamalar arasında geçiş yaptığında veya eşzamanlı görevler gerçekleştirdiğinde tüm işlemi her seferinde baştan yapmak zorunda kalmamak için işlem tamamlanana kadar bağlantıyı etkin tutmanız gerekir. connectedDevice türünde bir ön plan hizmeti veya ikincil cihaz varlığı API'si'ni kullanabilirsiniz.
Çevre birimi bildirimlerini dinlerken
Uygulamanın çevre birimi bildirimlerini dinlemek için setCharacteristicNotification() yöntemini çağırması, onCharacteristicChanged() kullanarak geri çağırmaları dinlemesi ve bağlantıyı canlı tutması gerekir. Uygulamanın uzun süre dinlemeye devam etmesi gerekeceğinden çoğu uygulamada bu kullanım alanını CompanionDeviceService ile desteklemek en iyisidir. Ancak ön plan hizmeti de kullanabilirsiniz.
Her iki durumda da, sonlandırılan bir işlemden sonra Cihaza bağlanma bölümündeki talimatları uygulayarak yeniden bağlanabilirsiniz.