Bagikan melalui


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

  1. Di Microsoft Visual Studio, di Penjelajah Solusi, buka perancang untuk manifes aplikasi dengan mengklik dua kali item package.appxmanifest.
  2. Pilih tab Kemampuan.
  3. 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 (SelectScannerAsynctugas 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

Lihat juga