Memulai dengan Point of Service

Point of service, point of sale, atau perangkat Point of Service adalah periferal komputer yang digunakan untuk memfasilitasi transaksi ritel. Contoh perangkat Point of Service termasuk mesin kasir elektronik, pemindai barcode, pembaca strip magnetik, dan printer tanda terima.

Di sini Anda akan mempelajari dasar-dasar berinteraksi dengan perangkat Point of Service dengan menggunakan Windows Api Runtime Point of Service. Kami akan membahas pencacahan perangkat, memeriksa kemampuan perangkat, mengklaim perangkat, dan berbagi perangkat. Kami menggunakan perangkat pemindai kode batang sebagai contoh, tetapi hampir semua panduan di sini berlaku untuk perangkat Point of Service yang kompatibel dengan UWP. (Untuk daftar perangkat yang didukung, lihat Dukungan perangkat Point of Service).

Menemukan dan menghubungkan ke periferal Point of Service

Sebelum perangkat Point of Service dapat digunakan oleh aplikasi, perangkat tersebut harus dipasangkan dengan PC tempat aplikasi berjalan. Ada beberapa cara untuk terhubung ke perangkat Point of Service, baik secara terprogram atau melalui aplikasi Pengaturan.

Menyambungkan ke perangkat dengan menggunakan aplikasi Pengaturan

Saat Anda mencolokkan perangkat Point of Service seperti pemindai kode batang ke PC, perangkat tersebut muncul seperti perangkat lainnya. Anda dapat menemukannya di bagian Perangkat > Bluetooth & perangkat lain dari aplikasi Pengaturan. Di sana Anda dapat memasangkan dengan perangkat Point of Service dengan memilih Tambahkan Bluetooth atau perangkat lainnya.

Beberapa perangkat Point of Service mungkin tidak muncul di aplikasi Pengaturan sampai mereka disebutkan secara terprogram dengan menggunakan API Point of Service.

Mendapatkan satu perangkat Point of Service dengan GetDefaultAsync

Dalam kasus penggunaan sederhana, Anda mungkin hanya memiliki satu periferal Point of Service yang terhubung ke PC tempat aplikasi berjalan dan ingin mengaturnya secepat mungkin. Untuk melakukan itu, ambil perangkat "default" dengan metode GetDefaultAsync seperti yang ditunjukkan di sini.

using Windows.Devices.PointOfService;

BarcodeScanner barcodeScanner = await BarcodeScanner.GetDefaultAsync();

Jika perangkat default ditemukan, objek perangkat yang diambil siap diklaim. "Mengklaim" perangkat memberikan aplikasi akses eksklusif ke sana, mencegah perintah yang bertentangan dari beberapa proses.

Catatan

Jika lebih dari satu perangkat Point of Service terhubung ke PC, GetDefaultAsync mengembalikan perangkat pertama yang ditemukannya. Untuk alasan ini, gunakan FindAllAsync kecuali Anda yakin bahwa hanya satu perangkat Point of Service yang terlihat oleh aplikasi.

Menghitung koleksi perangkat dengan FindAllAsync

Saat terhubung ke lebih dari satu perangkat, Anda harus menghitung koleksi objek perangkat PointOfService untuk menemukan yang ingin Anda klaim. Misalnya, kode berikut membuat kumpulan semua pemindai kode batang yang saat ini terhubung, dan kemudian mencari koleksi untuk pemindai dengan nama tertentu.

using Windows.Devices.Enumeration;
using Windows.Devices.PointOfService;

string selector = BarcodeScanner.GetDeviceSelector();       
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

foreach (DeviceInformation devInfo in deviceCollection)
{
    Debug.WriteLine("{0} {1}", devInfo.Name, devInfo.Id);
    if (devInfo.Name.Contains("1200G"))
    {
        Debug.WriteLine(" Found one");
    }
}

Scoping pemilihan perangkat

Saat menyambungkan ke perangkat, Anda mungkin ingin membatasi penelusuran ke subset periferal Point of Service yang dapat diakses aplikasi Anda. Dengan menggunakan metode GetDeviceSelector, Anda dapat melakukan cakupan pilihan untuk mengambil perangkat yang hanya terhubung dengan metode tertentu (Bluetooth, USB, dll.). Anda dapat membuat pemilih yang mencari perangkat melalui Bluetooth, IP, Lokal, atau Semua jenis koneksi. Ini bisa berguna, karena penemuan perangkat nirkabel membutuhkan waktu lama dibandingkan dengan penemuan lokal (kabel). Anda dapat memastikan waktu tunggu deterministik untuk koneksi perangkat lokal dengan membatasi FindAllAsync ke jenis koneksi Lokal . Misalnya, kode ini mengambil semua pemindai kode batang yang dapat diakses melalui koneksi lokal.

string selector = BarcodeScanner.GetDeviceSelector(PosConnectionTypes.Local);
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Bereaksi terhadap perubahan koneksi perangkat dengan DeviceWatcher

Saat aplikasi Anda berjalan, terkadang perangkat akan terputus atau diperbarui, atau perangkat baru perlu ditambahkan. Anda dapat menggunakan kelas DeviceWatcher untuk mengakses acara terkait perangkat, sehingga aplikasi Anda dapat merespons sesuai dengan itu. Berikut adalah contoh cara menggunakan DeviceWatcher, dengan rintisan metode yang akan dipanggil jika perangkat ditambahkan, dihapus, atau diperbarui.

DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
deviceWatcher.Added += DeviceWatcher_Added;
deviceWatcher.Removed += DeviceWatcher_Removed;
deviceWatcher.Updated += DeviceWatcher_Updated;

void DeviceWatcher_Added(DeviceWatcher sender, DeviceInformation args)
{
    // TODO: Add the DeviceInformation object to your collection
}

void DeviceWatcher_Removed(DeviceWatcher sender, DeviceInformationUpdate args)
{
    // TODO: Remove the item in your collection associated with DeviceInformationUpdate
}

void DeviceWatcher_Updated(DeviceWatcher sender, DeviceInformationUpdate args)
{
    // TODO: Update your collection with information from DeviceInformationUpdate
}

Memeriksa kemampuan perangkat Point of Service

Bahkan dalam kelas perangkat, seperti pemindai kode batang, atribut setiap perangkat dapat sangat bervariasi antar model. Jika aplikasi Anda memerlukan atribut perangkat tertentu, Anda mungkin perlu memeriksa setiap objek perangkat yang terhubung untuk menentukan apakah atribut didukung. Misalnya, mungkin bisnis Anda mengharuskan label dibuat menggunakan pola pencetakan barcode tertentu. Berikut adalah cara Anda dapat memeriksa untuk melihat apakah pemindai barcode yang terhubung mendukung simbologi.

Catatan

Simbologi adalah pemetaan bahasa yang digunakan barcode untuk menyandikan pesan.

try
{
    BarcodeScanner barcodeScanner = await BarcodeScanner.FromIdAsync(deviceId);
    if (await barcodeScanner.IsSymbologySupportedAsync(BarcodeSymbologies.Code32))
    {
        Debug.WriteLine("Has symbology");
    }
}
catch (Exception ex)
{
    Debug.WriteLine("FromIdAsync() - " + ex.Message);
}

Menggunakan kelas Device.Capabilities

Kelas Device.Capabilities adalah atribut dari semua kelas perangkat Point of Service dan dapat digunakan untuk mendapatkan informasi umum tentang setiap perangkat. Misalnya, contoh ini menentukan apakah perangkat mendukung pelaporan statistik dan, jika ya, mengambil statistik untuk semua jenis yang didukung.

try
{
    if (barcodeScanner.Capabilities.IsStatisticsReportingSupported)
    {
        Debug.WriteLine("Statistics reporting is supported");

        string[] statTypes = new string[] {""};
        IBuffer ibuffer = await barcodeScanner.RetrieveStatisticsAsync(statTypes);
    }
}
catch (Exception ex)
{
    Debug.WriteLine("EX: RetrieveStatisticsAsync() - " + ex.Message);
}

Mengklaim perangkat Point of Service

Sebelum Anda dapat menggunakan perangkat Point of Service untuk input atau output aktif, Anda harus mengklaimnya, memberikan aplikasi akses eksklusif ke banyak fungsinya. Kode ini menunjukkan cara mengklaim perangkat pemindai kode batang, setelah Anda menemukan perangkat dengan menggunakan salah satu metode yang dijelaskan sebelumnya.

try
{
    claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();
}
catch (Exception ex)
{
    Debug.WriteLine("EX: ClaimScannerAsync() - " + ex.Message);
}

Mempertahankan perangkat

Saat menggunakan perangkat Point of Service melalui jaringan atau koneksi Bluetooth, Anda mungkin ingin berbagi perangkat dengan aplikasi lain di jaringan. (Untuk info selengkapnya tentang ini, lihat Berbagi Perangkat.) Dalam kasus lain, Anda mungkin ingin mempertahankan perangkat untuk penggunaan jangka panjang. Contoh ini menunjukkan cara mempertahankan pemindai kode batang yang diklaim setelah aplikasi lain meminta agar perangkat dirilis.

claimedBarcodeScanner.ReleaseDeviceRequested += claimedBarcodeScanner_ReleaseDeviceRequested;

void claimedBarcodeScanner_ReleaseDeviceRequested(object sender, ClaimedBarcodeScanner e)
{
    e.RetainDevice();  // Retain exclusive access to the device
}

Input dan output

Setelah mengklaim perangkat, Anda hampir siap menggunakannya. Untuk menerima input dari perangkat, Anda harus menyiapkan dan mengaktifkan delegasi untuk menerima data. Pada contoh di bawah ini, kami mengklaim perangkat pemindai kode batang, mengatur properti decode-nya, lalu memanggil EnableAsync untuk mengaktifkan input yang diterjemahkan dari perangkat. Proses ini bervariasi antara kelas perangkat, jadi untuk panduan tentang cara menyiapkan delegasi untuk perangkat non-barcode, lihat sampel aplikasi UWP yang relevan.

try
{
    claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();
    if (claimedBarcodeScanner != null)
    {
        claimedBarcodeScanner.DataReceived += claimedBarcodeScanner_DataReceived;
        claimedBarcodeScanner.IsDecodeDataEnabled = true;
        await claimedBarcodeScanner.EnableAsync();
    }
}
catch (Exception ex)
{
    Debug.WriteLine("EX: ClaimScannerAsync() - " + ex.Message);
}


void claimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
    string symbologyName = BarcodeSymbologies.GetName(args.Report.ScanDataType);
    var scanDataLabelReader = DataReader.FromBuffer(args.Report.ScanDataLabel);
    string barcode = scanDataLabelReader.ReadString(args.Report.ScanDataLabel.Length);
}

Berbagi perangkat antar aplikasi

Perangkat Point of Service sering digunakan dalam kasus di mana lebih dari satu aplikasi perlu mengaksesnya dalam waktu singkat. Perangkat dapat dibagikan saat terhubung ke beberapa aplikasi secara lokal (USB atau koneksi kabel lainnya), atau melalui Bluetooth atau jaringan IP. Bergantung pada kebutuhan masing-masing aplikasi, satu proses mungkin perlu membuang klaimnya di perangkat. Kode ini membuang perangkat pemindai kode batang yang diklaim, memungkinkan aplikasi lain untuk mengklaim dan menggunakannya.

if (claimedBarcodeScanner != null)
{
    claimedBarcodeScanner.Dispose();
    claimedBarcodeScanner = null;
}

Catatan

Kelas perangkat Point of Service yang diklaim dan tidak diklaim menerapkan antarmuka IClosable. Jika perangkat terhubung ke aplikasi melalui jaringan atau Bluetooth, objek yang diklaim dan tidak diklaim harus dibuang sebelum aplikasi lain dapat terhubung.

Lihat juga