Отключить сканер штрих-кода при закрытии окна предварительного просмотра - PullRequest
0 голосов
/ 16 апреля 2019

Когда я закрываю окно предварительного просмотра своей BarcodeScanner, веб-камера остается активной, и я хочу предотвратить это, потому что странно видеть, что камера все еще включена, и что вы все равно можете сканировать штрих-код, даже если я закрою предварительный просмотр.

Я не могу понять, как отключить BarcodeScanner при закрытии окна предварительного просмотра.

Вот мой код 'BarcodeScanner':

private async Task<bool> ClaimScanner()
{
    bool res = false;

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

    if(scanner == null)
        scanner = await BarcodeScanner.FromIdAsync(deviceCollection[0].Id);

    if (scanner != null)
    {
        if(claimedBarcodeScanner == null)
            claimedBarcodeScanner = await scanner.ClaimScannerAsync();

        if (claimedBarcodeScanner != null)
        {
            claimedBarcodeScanner.DataReceived += ClaimedBarcodeScanner_DataReceivedAsync;
            claimedBarcodeScanner.ReleaseDeviceRequested += ClaimedBarcodeScanner_ReleaseDeviceRequested;
            claimedBarcodeScanner.IsDecodeDataEnabled = true;
            claimedBarcodeScanner.IsDisabledOnDataReceived = true;
            await claimedBarcodeScanner.EnableAsync();

            res = true;
            Debug.WriteLine("Barcode Scanner claimed");
        }
    }
    antispam = false;
    return res;
}

public async void ScanBarcodeAsync()
{
    if(claimedBarcodeScanner == null && !antispam)
    {
        antispam = true;
        await ClaimScanner();
    }
    if(claimedBarcodeScanner != null)
    {
        await claimedBarcodeScanner.ShowVideoPreviewAsync();
        await claimedBarcodeScanner.StartSoftwareTriggerAsync();
        claimedBarcodeScanner = null;
    }
}

private async void ClaimedBarcodeScanner_DataReceivedAsync(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
    await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            if (currentDataContext != null && currentDataContext is Scannable)
            {
                Debug.WriteLine(CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanDataLabel));
                Scannable obj = (Scannable)currentDataContext;
                obj.NumSerie = CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanDataLabel);
            }
        }
    );
}

void ClaimedBarcodeScanner_ReleaseDeviceRequested(object sender, ClaimedBarcodeScanner e)
{
    // always retain the device
    e.RetainDevice();
}

РЕДАКТИРОВАТЬ: я использовал библиотеку, указанную Microsoft, предоставленную Digimarc: https://docs.microsoft.com/en-us/windows/uwp/devices-sensors/pos-camerabarcode

1 Ответ

1 голос
/ 18 апреля 2019

Отключить сканер штрих-кода при закрытии окна предварительного просмотра

ClaimedBarcodeScanner имеет метод StopSoftwareTriggerAsync, если вы хотите отключить сканер штрих-кода при закрытии окна предварительного просмотра, вы просто вызываете метод StopSoftwareTriggerAsync после HideVideoPreview.

private async void HidePreviewButton_Click(object sender, RoutedEventArgs e)
{
    claimedScanner?.HideVideoPreview();
    await claimedScanner?.StopSoftwareTriggerAsync();   
}
...