Iklan BLUETOOTH LE

Topik ini memberikan gambaran umum suar Iklan Bluetooth Low Energy (LE) untuk aplikasi Windows.

Important

Anda harus mendeklarasikan kemampuan "bluetooth" di Package.appxmanifest untuk menggunakan fitur ini.

<Capabilities> <DeviceCapability Name="bluetooth" /> </Capabilities>

Fitur yang didukung

Ada dua fitur utama yang didukung oleh API Iklan LE:

Penyetelan Dasar

Untuk menggunakan fungsionalitas BLUETOOTH LE dasar di aplikasi Platform Windows Universal, Anda harus memeriksa kemampuan Bluetooth di Package.appxmanifest.

  1. Buka Package.appxmanifest
  2. Masuk ke tab Kapabilitas
  3. Temukan Bluetooth di daftar di sebelah kiri dan centang kotak di sampingnya.

Menerbitkan Iklan

Siaran Bluetooth LE memungkinkan perangkat Anda untuk terus-menerus menyiarkan payload tertentu, yang disebut iklan. Iklan ini dapat dilihat oleh perangkat berkemampuan Bluetooth LE terdekat, jika mereka disiapkan untuk mendengarkan iklan khusus ini.

Note

Untuk privasi pengguna, masa pakai iklan Anda terkait dengan aplikasi Anda. Anda dapat membuat BluetoothLEAdvertisementPublisher dan memanggil Mulai di tugas latar belakang untuk iklan di latar belakang. Untuk informasi selengkapnya tentang tugas latar belakang, lihat Meluncurkan, memulai kembali, dan tugas latar belakang.

Ada banyak cara berbeda untuk menambahkan data ke Iklan. Contoh ini menunjukkan cara umum untuk membuat iklan khusus perusahaan.

Pertama, buat penerbit iklan yang mengontrol apakah perangkat memunculkan iklan tertentu atau tidak.

BluetoothLEAdvertisementPublisher publisher = new BluetoothLEAdvertisementPublisher();

Kedua, buat bagian data kustom. Contoh ini menggunakan nilai CompanyId yang tidak ditetapkan 0xFFFE dan menambahkan teks Halo Dunia ke iklan.

// Add custom data to the advertisement
var manufacturerData = new BluetoothLEManufacturerData();
manufacturerData.CompanyId = 0xFFFE;

var writer = new DataWriter();
writer.WriteString("Hello World");

// Make sure that the buffer length can fit within an advertisement payload (~20 bytes). 
// Otherwise you will get an exception.
manufacturerData.Data = writer.DetachBuffer();

// Add the manufacturer data to the advertisement publisher:
publisher.Advertisement.ManufacturerData.Add(manufacturerData);

Setelah penerbit dibuat dan disiapkan, Anda dapat memanggil Mulai untuk mulai beriklan.

publisher.Start();

Tonton Iklan

Kode berikut menunjukkan cara membuat pengamat Iklan LE Bluetooth, mengatur panggilan balik, dan mulai menonton semua iklan LE.

BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher();
watcher.Received += OnAdvertisementReceived;
watcher.Start();
private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
    // Do whatever you want with the advertisement
}

Pemindaian Aktif

Untuk menerima iklan respons pemindaian juga, atur hal berikut setelah membuat pengamat. Perhatikan bahwa ini akan menyebabkan pengurasan daya yang lebih besar dan tidak tersedia saat dalam mode latar belakang.

watcher.ScanningMode = BluetoothLEScanningMode.Active;

Tonton Pola Iklan Tertentu

Terkadang Anda ingin mendengarkan iklan tertentu. Dalam hal ini, pantau paket iklan yang berisi payload dengan perusahaan fiktif (diidentifikasi sebagai 0xFFFE) dan yang memuat string Halo Dunia di dalam iklan. Ini dapat dipadukan dengan contoh Penerbitan Dasar agar satu mesin Windows menyiarkan dan mesin lainnya memantau. Pastikan mengatur filter iklan ini sebelum Anda memulai pemantau!

var manufacturerData = new BluetoothLEManufacturerData();
manufacturerData.CompanyId = 0xFFFE;

// Make sure that the buffer length can fit within an advertisement payload (~20 bytes). 
// Otherwise you will get an exception.
var writer = new DataWriter();
writer.WriteString("Hello World");
manufacturerData.Data = writer.DetachBuffer();

watcher.AdvertisementFilter.Advertisement.ManufacturerData.Add(manufacturerData);

Tonton Iklan Terdekat

Terkadang Anda hanya ingin memicu pemantau saat siaran perangkat sudah berada dalam jangkauan. Anda dapat menentukan rentang sendiri, perlu diperhatikan bahwa nilai akan dibatasi dalam rentang 0 hingga -128.

// Set the in-range threshold to -70dBm. This means advertisements with RSSI >= -70dBm 
// will start to be considered "in-range" (callbacks will start in this range).
watcher.SignalStrengthFilter.InRangeThresholdInDBm = -70;

// Set the out-of-range threshold to -75dBm (give some buffer). Used in conjunction 
// with OutOfRangeTimeout to determine when an advertisement is no longer 
// considered "in-range".
watcher.SignalStrengthFilter.OutOfRangeThresholdInDBm = -75;

// Set the out-of-range timeout to be 2 seconds. Used in conjunction with 
// OutOfRangeThresholdInDBm to determine when an advertisement is no longer 
// considered "in-range"
watcher.SignalStrengthFilter.OutOfRangeTimeout = TimeSpan.FromMilliseconds(2000);

Jarak pengukur

Saat panggilan balik Bluetooth LE Watcher Anda dipicu, eventArgs menyertakan nilai RSSI yang memberi tahu Anda kekuatan sinyal yang diterima (seberapa kuat sinyal Bluetooth).

private async void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
   // The received signal strength indicator (RSSI)
   Int16 rssi = eventArgs.RawSignalStrengthInDBm;
}

Ini kira-kira dapat diterjemahkan ke dalam jarak, tetapi tidak boleh digunakan untuk mengukur jarak yang benar karena setiap radio individu berbeda. Faktor lingkungan yang berbeda dapat membuat jarak sulit untuk mengukur (seperti dinding, kasus di sekitar radio, atau bahkan kelembaban udara).

Alternatif untuk menilai hanya berdasarkan jarak adalah dengan menentukan "kelompok". Radio cenderung melaporkan 0 hingga -50 DBm ketika mereka sangat dekat, -50 ke -90 ketika jaraknya sedang, dan di bawah -90 ketika mereka jauh. Metode coba-coba merupakan cara terbaik untuk menentukan kategori seperti apa yang Anda inginkan untuk aplikasi Anda.

Example

Untuk contoh Iklan BLUETOOTH LE yang berfungsi penuh, lihat Sampel Iklan Bluetooth di Github.