Mulai menggunakan pemindai kode batang kamera
Topik ini menjelaskan cara menyiapkan pemindai kode batang kamera dasar dalam aplikasi UWP.
Catatan
Dekoder perangkat lunak yang disertakan dalam Windows 10/11 disediakan oleh Digimarc Corporation.
Cuplikan kode berikut hanya untuk tujuan demonstrasi. Untuk sampel kerja lengkap, lihat sampel pemindai Kode Batang.
Langkah 1: Menambahkan deklarasi kemampuan ke manifes aplikasi Anda
- Di Microsoft Visual Studio, di Penjelajah Solusi, buka perancang untuk manifes aplikasi dengan mengklik dua kali item package.appxmanifest.
- Pilih tab Kemampuan.
- Centang kotak untuk Webcam dan PointOfService.
Catatan
Kemampuan Webcam diperlukan agar dekoder perangkat lunak menerima bingkai dari kamera untuk mendekode kode batang dan menyediakan pratinjau di aplikasi Anda.
Langkah 2: Tambahkan using
arahan
using Windows.Devices.Enumeration;
using Windows.Devices.PointOfService;
Langkah 3: Tentukan pemilih perangkat Anda
Gunakan salah satu metode BarcodeScanner.GetDeviceSelector untuk mendapatkan objek BarcodeScanner untuk setiap pemindai kode batang yang terhubung.
Opsi A: Temukan semua pemindai kode batang
string selector = BarcodeScanner.GetDeviceSelector();
Opsi B: Temukan semua pemindai kode batang berdasarkan cakupan (untuk contoh ini, kami memfilter pada Jenis koneksi lokal )
string selector = BarcodeScanner.GetDeviceSelector(PosConnectionTypes.Local);
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);
Langkah 4: Menghitung pemindai kode batang
Jika Anda tidak mengharapkan daftar perangkat berubah selama masa pakai aplikasi Anda, gunakan DeviceInformation.FindAllAsync untuk mendapatkan rekam jepret satu kali. Namun, jika daftar pemindai kode batang dapat berubah selama masa pakai aplikasi Anda, gunakan DeviceWatcher sebagai gantinya.
Penting
Menggunakan GetDefaultAsync untuk menghitung perangkat PointOfService dapat mengakibatkan perilaku yang tidak konsisten karena hanya mengembalikan perangkat pertama yang ditemukan di kelas (yang dapat berubah dari sesi ke sesi).
Opsi A: Menghitung rekam jepret semua pemindai kode batang yang terhubung berdasarkan pemilih yang dibuat di Langkah 3
Dalam cuplikan ini, kami membuat objek DeviceInformationCollection dan menggunakan ****DeviceInformation.FindAllAsync untuk mengisinya.
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);
Tip
Lihat Menghitung rekam jepret perangkat untuk informasi selengkapnya tentang menggunakan DeviceInformation.FindAllAsync.
Opsi B: Menghitung pemindai kode batang yang tersedia berdasarkan pemilih yang dibuat di Langkah 3 dan perhatikan perubahan pada koleksi tersebut
Dalam cuplikan ini, kami membuat DeviceWatcher menggunakan DeviceInformation.CreateWatcher.
DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
watcher.Added += Watcher_Added;
watcher.Removed += Watcher_Removed;
watcher.Updated += Watcher_Updated;
watcher.Start();
Tip
Untuk informasi selengkapnya, lihat Menghitung dan menonton perangkat dan DeviceWatcher.
Langkah 5: Mengidentifikasi pemindai kode batang kamera
Pemindai kode batang kamera terdiri dari kamera (terpasang pada komputer) yang dikombinasikan dengan dekoder perangkat lunak, yang dipasangkan secara dinamis windows untuk membuat pemindai kode batang yang berfungsi penuh untuk aplikasi Platform Windows Universal (UWP).
BarcodeScanner.VideoDeviceID dapat digunakan untuk membedakan antara pemindai kode batang kamera dan pemindai kode batang fisik. VideoDeviceID non-NULL menunjukkan bahwa objek pemindai kode batang dari koleksi perangkat Anda adalah pemindai kode batang kamera. Jika Anda memiliki lebih dari satu pemindai kode batang kamera, Anda mungkin ingin membangun koleksi terpisah yang mengecualikan pemindai kode batang fisik.
Pemindai kode batang kamera menggunakan dekoder yang dikirim dengan Windows diidentifikasi sebagai:
Microsoft BarcodeScanner (nama kamera Anda di sini)
Jika ada lebih dari satu kamera, dan dibangun ke dalam sasis komputer, namanya mungkin membedakan antara kamera depan dan belakang .
Saat DeviceWatcher dimulai (lihat Langkah 4: Menghitung pemindai kode batang), itu menghitung melalui setiap perangkat yang terhubung. Dalam cuplikan berikut, kami menambahkan setiap pemindai yang tersedia ke koleksi BarcodeScanner dan mengikat koleksi ke ListBox.
ObservableCollection<BarcodeScanner> barcodeScanners =
new ObservableCollection<BarcodeScanner>();
private async void Watcher_Added(DeviceWatcher sender, DeviceInformation args)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
barcodeScanners.Add(new BarcodeScanner(args.Name, args.Id));
// Select the first scanner by default.
if (barcodeScanners.Count == 1)
{
ScannerListBox.SelectedIndex = 0;
}
});
}
Ketika SelectedIndex dari ListBox berubah (item pertama dipilih secara default di cuplikan sebelumnya), kami mengkueri info perangkat (SelectScannerAsync
tugas diimplementasikan di Langkah 6: Klaim pemindai kode batang kamera).
private async void ScannerSelection_Changed(object sender, SelectionChangedEventArgs args)
{
var selectedScannerInfo = (BarcodeScanner)args.AddedItems[0];
var deviceId = selectedScannerInfo.DeviceId;
await SelectScannerAsync(deviceId);
}
Langkah 6: Klaim pemindai kode batang kamera
Panggil BarcodeScanner.ClaimScannerAsync untuk mendapatkan penggunaan eksklusif pemindai kode batang kamera.
private async Task SelectScannerAsync(string scannerDeviceId)
{
selectedScanner = await BarcodeScanner.FromIdAsync(scannerDeviceId);
if (selectedScanner != null)
{
claimedScanner = await selectedScanner.ClaimScannerAsync();
if (claimedScanner != null)
{
await claimedScanner.EnableAsync();
}
else
{
rootPage.NotifyUser("Failed to claim the selected barcode scanner", NotifyType.ErrorMessage);
}
}
else
{
rootPage.NotifyUser("Failed to create a barcode scanner object", NotifyType.ErrorMessage);
}
}
Langkah 7: Pratinjau yang disediakan sistem
Pratinjau kamera diperlukan untuk membantu pengguna mengarahkan kamera ke kode batang. Windows menyediakan pratinjau kamera dasar yang meluncurkan dialog untuk mengontrol pemindai kode batang kamera.
Panggil ClaimedBarcodeScanner.ShowVideoPreview untuk membuka dialog dan ClaimedBarcodeScanner.HideVideoPreview untuk menutupnya.
Tip
Lihat Pratinjau Hosting untuk menghosting pratinjau pemindai kode batang kamera di aplikasi Anda.
Langkah 8: Memulai pemindaian
Anda dapat memulai proses pemindaian dengan memanggil StartSoftwareTriggerAsync.
Bergantung pada nilai IsDisabledOnDataReceived pemindai mungkin hanya memindai satu kode batang lalu menghentikan atau memindai terus menerus hingga Anda memanggil StopSoftwareTriggerAsync.
Atur nilai yang diinginkan dari IsDisabledOnDataReceived untuk mengontrol perilaku pemindai saat kode batang didekodekan.
Nilai | Deskripsi |
---|---|
Benar | Pindai hanya satu kode batang lalu hentikan |
Salah | Terus memindai kode batang tanpa berhenti |