BluetoothAdapter
kullanılırken
uzak Bluetooth cihazları, cihaz bulma yoluyla veya
eşlenen cihazların listesini sorgulamayı içerir.
Uygun Bluetooth izinlerine sahip olduğunuzdan emin olun ve uygulamanızı Bluetooth için ayarlayın yardımcı olabilir.
Cihaz keşfi, bir tarama prosedürüdür. Bu işlem, Bluetooth özellikli cihazlar ve her biriyle ilgili bazı bilgiler ister. Bu Süreç bazen keşfetme, sorgulama veya tarama olarak da adlandırılır. Yakındaki bir Bluetooth cihazı, keşif isteğine ancak şu anda bilgi isteklerini bulunabilir olarak kabul ediyor. Cihaz bulunabilir, keşif isteğine bazı bilgileri paylaşarak yanıt verir. Örneğin, cihazın adı, sınıfı ve benzersiz MAC adresi. Bunu kullanma Keşif işlemini gerçekleştiren cihaz, arama sonuçlarından keşfedilen cihazla bağlantı başlatma.
Bulunabilir cihazlar, kullanıcının konumuyla ilgili bilgileri açığa çıkarabileceğinden Cihazın keşif işlemi için konum erişimi gerekir. Uygulamanız kullanılıyorsa Android 8.0 (API düzeyi 26) veya sonraki bir sürümü çalıştıran bir cihaz kullanıyorsanız Companion Cihaz Yöneticisi API kullanın. Bu API sizin uygulamanız adına cihaz bulması sağladığından uygulamanızın konum izni isteme.
Uzak cihazla ilk kez bağlantı kurulduğunda, isteği otomatik olarak kullanıcıya sunulur. Bir cihaz eşlendiğinde söz konusu cihazla ilgili temel bilgiler (örneğin, cihazın adı, sınıfı ve MAC adresi) kaydedilir ve Bluetooth API'leri kullanılarak okunabilir. Bilinen MAC'yi kullanma uzak cihazın adresini kullanıyorsanız, istediğiniz zaman cihazla bağlantı cihazın kapsama alanında olduğu varsayılır.
Eşlenmiş olmakla bağlı olmak arasında bir fark olduğunu unutmayın:
- Eşlenmiş olmak iki cihazın birbirlerinin varlığından haberdar olduğu anlamına gelir. kimlik doğrulama için kullanılabilecek ve aşağıdakileri yapabilen bir paylaşılan bağlantı anahtarına sahip olmalıdır ve birbirleriyle şifreli bir bağlantı kurarlar.
- Bağlı olması, cihazların şu anda bir RFCOMM kanalını paylaştığı ve birbirlerine veri geçirebiliyorlar. Mevcut Bluetooth API'ler, bir RFCOMM bağlantısının kurulabilmesi için cihazların eşlenmesini gerektirir yerleşik olarak bulunur. Şifrelenmiş bir işlem başlattığınızda eşleme otomatik olarak gerçekleştirilir Bluetooth API'leriyle bağlantı.
Aşağıdaki bölümlerde, eşlenmiş ve Cihaz bulmayı kullanarak yeni cihazları keşfetme.
Eşlenen cihazları sorgula
Cihaz keşfi gerçekleştirmeden önce, eşlenmiş
cihazın bilinen bir cihaz olup olmadığını kontrol edin. Bunun için şu numarayı arayın:
getBondedDevices()
.
Bu,
BluetoothDevice
nesne
temsil eder. Örneğin, eşlenen tüm cihazları sorgulayabilir ve
aşağıdaki kod snippet'i gibi her cihazın adını ve MAC adresini al
gösterir:
Kotlin
val pairedDevices: Set<BluetoothDevice>? = bluetoothAdapter?.bondedDevices pairedDevices?.forEach { device -> val deviceName = device.name val deviceHardwareAddress = device.address // MAC address }
Java
Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices(); if (pairedDevices.size() > 0) { // There are paired devices. Get the name and address of each paired device. for (BluetoothDevice device : pairedDevices) { String deviceName = device.getName(); String deviceHardwareAddress = device.getAddress(); // MAC address } }
Bir Bluetooth cihazla bağlantı başlatmak için gereken her şey
ilişkilendirilmiş BluetoothDevice
nesnesi,
arama
getAddress()
Siz
bağlantı oluşturma hakkında daha fazla bilgiyi Bluetooth'u Bağla
cihazlar.
Cihazları keşfedin
Cihazları keşfetmeye başlamak için şu numarayı arayın:
startDiscovery()
.
İşlem eşzamansızdır ve işlemin mevcut olup olmadığını gösteren bir boole değeri
discovery başarıyla başlatıldı. Keşif süreci genellikle
12 saniyelik sorgu taraması ve ardından bulunan her cihaz için sayfa taraması
dokunun.
Keşfedilen her cihazla ilgili bilgi almak için uygulamanızın
BroadcastReceiver
-
ACTION_FOUND
isteyebilirsiniz. Sistem bu amacı her cihazda yayınlar. Amaç şunu içerir:
ekstra alanlar
EXTRA_DEVICE
ve
EXTRA_CLASS
, hangi
bir BluetoothDevice
ve bir
BluetoothClass
.
Aşağıdaki kod snippet'i, yayını işlemek için nasıl kayıt olabileceğinizi gösterir
keşfedildiğinde:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... // Register for broadcasts when a device is discovered. val filter = IntentFilter(BluetoothDevice.ACTION_FOUND) registerReceiver(receiver, filter) } // Create a BroadcastReceiver for ACTION_FOUND. private val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val action: String = intent.action when(action) { BluetoothDevice.ACTION_FOUND -> { // Discovery has found a device. Get the BluetoothDevice // object and its info from the Intent. val device: BluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE) val deviceName = device.name val deviceHardwareAddress = device.address // MAC address } } } } override fun onDestroy() { super.onDestroy() ... // Don't forget to unregister the ACTION_FOUND receiver. unregisterReceiver(receiver) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { ... // Register for broadcasts when a device is discovered. IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(receiver, filter); } // Create a BroadcastReceiver for ACTION_FOUND. private final BroadcastReceiver receiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { // Discovery has found a device. Get the BluetoothDevice // object and its info from the Intent. BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); String deviceName = device.getName(); String deviceHardwareAddress = device.getAddress(); // MAC address } } }; @Override protected void onDestroy() { super.onDestroy(); ... // Don't forget to unregister the ACTION_FOUND receiver. unregisterReceiver(receiver); }
Bir Bluetooth cihazıyla bağlantı başlatmak için getAddress()
numaralı telefonu şu telefondan ararsınız:
BluetoothDevice
ile ilişkili MAC adresini alın.
Keşfedilebilirliği etkinleştir
Yerel cihazı diğer cihazlar tarafından bulunabilir hale getirmek için şu numarayı arayın:
startActivityForResult(Intent, int)
şununla:
ACTION_REQUEST_DISCOVERABLE
isteyebilirsiniz. Bu işlem, sistemin keşfedilebilir modunun etkinleştirilmesi için bir istek gönderir:
Ayarlar uygulamasına gitmek zorunda kalıyorsunuz, bu da kendi uygulamanızı durduracak. Ölçüt
Cihaz iki dakika boyunca bulunabilir hale gelir. Hedeflerinize göre bir
en fazla bir saat olmak üzere farklı bir süre için
EXTRA_DISCOVERABLE_DURATION
ekstra
Aşağıdaki kod snippet'i, cihazı beş dakika boyunca bulunabilir olacak şekilde ayarlar:
Kotlin
val requestCode = 1; val discoverableIntent: Intent = Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE).apply { putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300) } startActivityForResult(discoverableIntent, requestCode)
Java
int requestCode = 1; Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); startActivityForResult(discoverableIntent, requestCode);
Şekil 2: Keşfedilebilirliği etkinleştirme iletişim kutusu.
Cihazı oluşturmak için kullanıcıdan izin isteyen bir iletişim kutusu görüntülenir
bulunabilir. Kullanıcı "İzin ver" yanıtı verirse ardından
cihaz belirtilen süre boyunca bulunabilir hale gelir. O zamanki etkinliğiniz
bir çağrı geldiğinde
onActivityResult()
geri çağırma (sonuç kodu, cihazın bağlı olduğu süreye eşittir)
bulunabilir. Kullanıcı "Reddet" yanıtını verdiyse veya bir hata oluştuysa sonuç
kod RESULT_CANCELED
.
Cihaz, verilen süre boyunca sessizce bulunabilir modda kalır. Şunlar:
bulunabilir mod değiştiğinde bildirim almak için bir BroadcastReceiver
kaydedin
-
ACTION_SCAN_MODE_CHANGED
isteyebilirsiniz. Bu amaç ekstra alanlar içeriyor
EXTRA_SCAN_MODE
ve
EXTRA_PREVIOUS_SCAN_MODE
,
Bu ayarlar sırasıyla yeni ve eski tarama modunu sağlar. Her biri için olası değerler
ekstra özellikler şunlardır:
SCAN_MODE_CONNECTABLE_DISCOVERABLE
- Cihaz, bulunabilir modda.
SCAN_MODE_CONNECTABLE
- Cihaz bulunabilir modda değildir, ancak yine de bağlantı alabilir.
SCAN_MODE_NONE
- Cihaz bulunabilir modda değildir ve bağlantı alamaz.
Uzak cihaz bağlantısı başlatıyorsanız cihaz bulunabilirliğini etkinleştirin. Keşfedilebilirliğin etkinleştirilmesi yalnızca uygulamanızın gelen aramaları kabul eden bir sunucu yuvası diğer cihazları da keşfedebilmesi gerektiğinden, uzaktaki cihazların bağlantı başlatamazsınız.