Bu kılavuzda, uygulamanız arka planda çalışırken çevre birimi cihazlarıyla iletişim kurmaya yönelik temel kullanım alanlarının nasıl destekleneceğine dair bir genel bakış sunulmaktadır:
Bu kullanım alanlarının her birini destekleyecek çeşitli seçenekler vardır. Her birinin özel ihtiyaçlarınıza daha çok ya da daha az uygun olmasını sağlayabilecek avantaj ve dezavantajları vardır.
Aşağıdaki şemada, 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. BDE cihazını bulmak için aşağıdaki API'lerden birini kullanabilirsiniz:
- BLE cihazlarını bulma bölümünde açıklandığı şekilde
BluetoothLeScanner
. (Örnek) CompanionDeviceManager
Tamamlayıcı cihaz eşleme bölümünde açıklandığı gibi. (Örnek)
Arka planda
Uygulama görünür değilken bu API'lerden ikisini de kullanabilirsiniz ancak her iki API'nin de hayatta kalması için uygulama sürecinize ihtiyacı vardır. Uygulama işlemi çalışmıyorsa aşağıdaki geçici çözümleri kullanabilirsiniz:
BluetoothLeScanner
için: Filtrenizle eşleşen bir cihaz tarandığında bildirim almak içinScanCallback
nesnesi yerinePendingIntent
nesnesiylestartScan()
çağırın. (Örnek)CompanionDeviceManager
için: Daha önce ilişkilendirilmiş bir cihaz kapsama alanındayken uygulamayı uyandırmak ve uyanık tutmak için Tamamlayıcı uygulamaları uyanık tutma bölümündeki talimatları uygulayın. (Örnek)
Bir cihaza bağlan
Bir cihazı bulduktan sonra ona bağlanmak için aşağıdaki kaynakların birinden cihaz için bir BluetoothDevice
örneği almanız gerekir:
- Önceki bölümde açıklanan
BluetoothLeScanner
tarama sonucu. BluetoothAdapter.getBondedDevices()
adresinden alınan bağlı cihaz listesi.BluetoothAdapter.getRemoteLeDevice()
kullananBluetoothAdapter
önbelleği.
Bir BluetoothDevice
örneğiniz olduğunda, connectGatt()
yöntemlerinden birini çağırarak ilgili cihaza bağlantı isteği başlatabilirsiniz. autoConnect
boole'sine ilettiğiniz değer, GATT istemcisinin aşağıdaki iki bağlantı modundan hangisini kullandığını tanımlar:
- Doğrudan bağlantı (
autoconnect = false
): Doğrudan çevre birimi cihazına bağlanmayı deneyin ve cihaz mevcut değilse başarısız olun. Bağlantının kesilmesi durumunda GATT istemcisi otomatik olarak yeniden bağlanmayı denemez. - Otomatik bağlan (
autoconnect = true
): Mümkün olduğunda çevre birimi cihazına otomatik olarak bağlanmayı deneyin. Çevre birimi tarafından bir bağlantı kesilmesi veya çevre biriminin kapsama alanı dışında olması durumunda GATT istemcisi, çevre birimi kullanılabilir olduğunda otomatik olarak yeniden bağlanmayı dener.
Arka planda
İşleminiz sonlandırılırsa bağlantı kapalı olsa da uygulama arka plandayken cihaza bağlanmayla ilgili herhangi bir kısıtlama yoktur. Buna ek olarak, arka plandan (Android 10 ve sonraki sürümlerde) veya ön plan hizmetlerini (Android 12 ve sonraki sürümlerde) başlatmayla ilgili kısıtlamalar vardır.
Bu nedenle, uygulamalar arka planda çalışırken bağlantı kurmak için aşağıdaki çözümleri kullanabilir:
- Cihazınıza bağlanmak için WorkManager'ı kullanın.
- Tanımlanmış bir işlemi gerçekleştirmek için
PeriodicWorkRequest
veyaOneTimeWorkRequest
ayarlayabilirsiniz ancak uygulama kısıtlamaları geçerli olabilir. - Ayrıca, iş kısıtlamaları, hızlandırılmış çalışma, yeniden deneme politikası gibi WorkManager özelliklerinden yararlanabilirsiniz.
- Veri senkronizasyonu veya çevre birimi cihazlarından 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üredir çalışan çalışanlar için destek bölümündeki talimatları uygulayarak bir ön plan hizmeti başlatmanız gerekir. Ancak ön plan hizmetinin kullanıma sunulmasıyla ilgili kısıtlamalar Android 12'den itibaren geçerlidir.
- Tanımlanmış bir işlemi gerçekleştirmek için
connectedDevice
türüyle bir ön plan hizmeti başlatın.- Veri senkronizasyonu veya çevre birimi cihazlarından 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üredir çalışan çalışanlar için destek bölümündeki talimatları uygulayarak bir ön plan hizmeti başlatmanız gerekir. Ancak ön plan hizmetinin kullanıma sunulmasıyla ilgili kısıtlamalar Android 12'den itibaren geçerlidir.
- Cihaz varken işleminizi uyandırmak için Cihaz bulma bölümünde açıklandığı gibi
startScan()
adlıPendingIntent
nesnesini çağırın. Çevre birimi cihazının reklam yayınlaması gerekir.- Bir Çalışan ve İş oluşturmanızı öneririz. Sistem bu işlemi kesintiye uğratabilir ve bu yüzden yalnızca kısa süreli iletişimi destekleyebilir.
- Android 12'den düşük sürümlerde ön plan hizmetini doğrudan
PendingIntent
nesnesinden başlatabilirsiniz.
- Hizmeti arka planda başlatmak için
CompanionDeviceService
ileREQUEST_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 cihazlarıyla yalnızca gerektiği sürece bağlantı kurmalı ve görev tamamlandığında bağlantısı kesilmelidir. Bununla birlikte, 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
'uREQUEST_COMPANION_RUN_IN_BACKGROUND
izni veCompanionDeviceManager.startObservingDevicePresence()
yöntemiyle kullanın.connectedDevice
ön plan türüyle uygulama ön plandayken (veya muafiyetlerden birindeyken) ön plan hizmeti başlatın.
Uygulamalar arasında geçiş yaparken
Bir cihaz bulmak, ona bağlanmak ve veri aktarmak zaman alan ve yoğun kaynak kullanan bir işlemdir. Kullanıcı uygulamalar arasında her geçiş yaptığında veya eş zamanlı görevleri gerçekleştirdiğinde bağlantıyı kaybetmemek ve tüm işlemi gerçekleştirmek zorunda kalmamak için işlem tamamlanana kadar bağlantıyı canlı tutmalısınız. connectedDevice
türünde bir ön plan hizmeti veya tamamlayıcı cihaz varlığı API'si ile kullanabilirsiniz.
Çevre birimi bildirimlerini dinlerken
Çevre birimi bildirimlerini dinlemek için uygulamanın setCharacteristicNotification()
'i çağırması, onCharacteristicChanged()
kullanarak geri çağırmaları dinlemesi ve bağlantıyı sürdürmesi gerekir. Çoğu uygulama için bu kullanım alanını CompanionDeviceService
ile desteklemek en iyisidir çünkü uygulamanın uzun süre dinlemeye devam etmesi gerekir. Ancak, bir ö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.