Bagikan melalui


Mulai menggunakan Titik Layanan

Titik layanan, titik penjualan, atau perangkat Titik Layanan adalah periferal komputer yang digunakan untuk memfasilitasi transaksi ritel. Contoh perangkat Point of Service termasuk mesin kasir elektronik, pemindai kode batang, pembaca strip magnetik, dan printer tanda terima.

Di sini Anda akan mempelajari dasar-dasar interfacing dengan perangkat Point of Service dengan menggunakan API Titik Layanan Runtime Windows. Kami akan membahas enumerasi 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 Titik Layanan).

Menemukan dan menyambungkan ke periferal Titik Layanan

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

Menyambungkan ke perangkat dengan menggunakan aplikasi Pengaturan

Saat Anda menyambungkan 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 di aplikasi Pengaturan. Di sana Anda dapat memasangkan dengan perangkat Titik Layanan dengan memilih Tambahkan Bluetooth atau perangkat lain.

Beberapa perangkat Titik Layanan mungkin tidak muncul di aplikasi Pengaturan hingga dijumlahkan secara terprogram dengan menggunakan API Titik Layanan.

Mendapatkan satu perangkat Titik Layanan dengan GetDefaultAsync

Dalam kasus penggunaan sederhana, Anda mungkin hanya memiliki satu periferal Titik Layanan yang terhubung ke PC tempat aplikasi berjalan dan ingin mengaturnya secepat mungkin. Untuk melakukannya, 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 untuk diklaim. "Mengklaim" perangkat memberi aplikasi akses eksklusif ke perangkat tersebut, mencegah perintah yang bertentangan dari beberapa proses.

Catatan

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

Menghitung kumpulan perangkat dengan FindAllAsync

Saat tersambung ke lebih dari satu perangkat, Anda harus menghitung kumpulan objek perangkat PointOfService untuk menemukan yang ingin Anda klaim. Misalnya, kode berikut membuat koleksi semua pemindai kode batang yang saat ini terhubung, lalu 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");
    }
}

Cakupan pilihan perangkat

Saat menyambungkan ke perangkat, Anda mungkin ingin membatasi pencarian ke subset periferal Titik Layanan yang dapat diakses aplikasi Anda. Dengan menggunakan metode GetDeviceSelector, Anda dapat mencakup 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 dapat 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 peristiwa terkait perangkat, sehingga aplikasi Anda dapat merespons dengan sesuai. Berikut adalah contoh cara menggunakan DeviceWatcher, dengan stub 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 Titik Layanan

Bahkan dalam kelas perangkat, seperti pemindai kode batang, atribut setiap perangkat dapat sangat bervariasi di antara 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 kode batang tertentu. Berikut adalah cara Anda dapat memeriksa apakah pemindai kode batang yang terhubung mendukung simmbologi.

Catatan

Simmbologi adalah pemetaan bahasa yang digunakan kode batang untuk mengodekan 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 Titik Layanan 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 jenis apa pun 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 Titik Layanan

Sebelum Anda dapat menggunakan perangkat Titik Layanan 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 Titik Layanan melalui jaringan atau koneksi Bluetooth, Anda mungkin ingin berbagi perangkat dengan aplikasi lain di jaringan. (Untuk informasi selengkapnya tentang ini, lihat Berbagi Perangkat.) Dalam kasus lain, Anda mungkin ingin berpegang pada perangkat untuk penggunaan yang lama. Contoh ini menunjukkan cara mempertahankan pemindai kode batang yang diklaim setelah aplikasi lain meminta 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 untuk menggunakannya. Untuk menerima input dari perangkat, Anda harus menyiapkan dan mengaktifkan delegasi untuk menerima data. Dalam contoh di bawah ini, kami mengklaim perangkat pemindai kode batang, mengatur properti dekodenya, lalu memanggil EnableAsync untuk mengaktifkan input yang didekode dari perangkat. Proses ini bervariasi di 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 Titik Layanan 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 jaringan Bluetooth atau IP. Tergantung pada kebutuhan setiap aplikasi, satu proses mungkin perlu membuang klaimnya pada 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 mengimplementasikan 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