Razvoj: Povezovanje Bluetooth naprav v Windows Phone 8 (brez LE)

Naprave s Bluetooth podporo in podprte aplikacije, so vedno bolj popularne med splošno populacijo. V tem članku vam bom predstavil najbolj osnovne korake za povezovanje na tovrstne naprave.

Naš primer bo podpiral vse Windows Phone 8 naprave in Bluetooth naprave brez LE (Low Energy) podpore. Za več informacij o podpori BT 4.0 LE za WP8 si preberite v članku Posodobitev Lumia Black.

1. Povežite vašo BT napravo s telefonom

Vse Bluetooth naprave moramo ročno povezati s našim telefonom. Pojdite v Settings –> Bluetooth in se povežite na vašo BT napravo. Uporabnik bo moral izvesti enak postopek dodajanja naprava. Bluetooth nastavitve lahko odprete tudi s to kodo:

await Launcher.LaunchUriAsync(new Uri("ms-settings-bluetooth:"));

2. Priprava projekta

Za Windows Phone platformo ni posebnih priprav. Zaželena je spletna stran, kjer na kratko napišete, kaj vse boste uporabljali v aplikaciji in kako se podatki prenašajo/shranjuje. Ta spletna stran je lahko golo besedilo in ga uporabite za privacy policy ob objavi aplikacije. Ta stran mora biti lokalizirane v ciljni jezik aplikacije.

3. Pridobivanje vse povezanih naprav

PeerFinder.AlternateIdentities["Bluetooth:Paired"] = "";
var peers = await PeerFinder.FindAllPeersAsync();

Ta seznam prikažete uporabniku ali pa sami izberete napravo.

4. Povezovanje na BT napravo

Ob povezovanju na želeno napravo lahko uporabite to kodo:

private async Task ConnectToDevice(PeerInformation peer)
{
    StreamSocket socket = new StreamSocket();

    // Second parameter is undocumented and you should not change.
    await socket.ConnectAsync(peer.HostName, "{00001101-0000-1000-8000-00805f9b34fb}");
    DataReader dataReader = new DataReader(socket.InputStream);
    DataWriter dataWriter = new DataWriter(socket.OutputStream);

    // TODO: Save socket and readers
}

Preberite specifikacije vaše BT naprave, ki vam bo razložila, kdaj lahko berete/pišete, kakšen je format komunikacije in pomen posameznih ukazov in podatkov. Večina naprav za branje zahteva intervalno branje podatkov. Jaz pišem svojo logiko v servise in za intervalno branje posodabljam podatke nekako takole:

while (isOpen)
{
    await service.Update();
    await Task.Delay(delay);
}

5. Branje in pisanje na BT naprave

Branje in pisanje na BT napravo se lahko razlikuje od naprave do naprave. Preberite specifikacije, preden se lotite branja in pisanja iz naprave.  Metoda za branje besedila DataReader.ReadString(int) vam lahko zruši program, zato vam jo odsvetujem. Branje posameznih bajtov se je izkazalo za najbolj zanesljivo.

Branje stream kot besedilo:

string message = string.Empty;
dataReader.InputStreamOptions = InputStreamOptions.Partial;
var count = await mDataReader.LoadAsync(100);
while (count-- > 0)
{
    message += (char)mDataReader.ReadByte();
}

Za pisanje v stream vam priporočam WriteBytes tudi za string. Pisanje v napravo je lahko najtežji del. Obvezno si prebrati specifikacije. Primer kode:

string message = command;
dataWriter.WriteBytes(Encoding.UTF8.GetBytes(message));
await dataWriter.FlushAsync();
await dataWriter.StoreAsync();
Advertisements