Bagikan melalui


Iklan BLUETOOTH LE

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

Penting

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

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

API penting

Fitur yang didukung

Ada dua fitur utama yang didukung oleh API Iklan LE:

  • Pengamat Iklan: dengarkan suar terdekat dan filter berdasarkan payload atau kedekatan.
  • Penerbit Iklan: tentukan payload untuk Windows untuk beriklan atas nama pengembang.

Contoh

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

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

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

Catatan

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();

Menonton 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;

Menonton Pola Iklan Tertentu

Terkadang Anda ingin mendengarkan iklan tertentu. Dalam hal ini, dengarkan iklan yang berisi payload dengan perusahaan terdiri (diidentifikasi sebagai 0xFFFE) dan berisi string yang Halo Dunia dalam iklan. Ini dapat dipasangkan dengan contoh Penerbitan Dasar untuk memiliki satu iklan mesin Windows dan yang lain menonton. Pastikan untuk mengatur filter iklan ini sebelum Anda memulai pengamat!

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);

Menonton Iklan Terdekat

Terkadang Anda hanya ingin memicu pengamat Anda ketika iklan perangkat telah berkisar. Anda dapat menentukan rentang Anda sendiri, perhatikan bahwa nilai akan diklip antara 0 dan -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 jarak murni adalah menentukan "wadah". Radio cenderung melaporkan 0 hingga -50 DBm ketika mereka sangat dekat, -50 hingga -90 ketika jaraknya sedang, dan di bawah -90 ketika mereka jauh. Uji coba dan kesalahan adalah yang terbaik untuk menentukan apa yang Anda inginkan untuk wadah ini untuk aplikasi Anda.