Freigeben über


Behandeln der Datenschutzeinstellung für Windows-Kamera

Windows ermöglicht Benutzern das Gewähren oder Verweigern des Zugriffs auf die Kamera des Geräts in der Windows-Einstellungs-App unter Datenschutz und Sicherheit –> Kamera. Der Kamerazugriff kann für das gesamte Gerät, für alle entpackten Apps oder für einzelne verpackte Apps deaktiviert werden. In diesem Artikel werden die bewährten Methoden zum Überprüfen beschrieben, ob Ihre App Zugriff auf die Kamera hat und den Fall behandelt, in dem der Zugriff vom Benutzer verweigert wird.

Überprüfen des Zugriffs vor dem Initialisieren der Kamera

Bei verpackten Apps sollten Sie überprüfen, ob Ihre App über Kamerazugriff verfügt, bevor Sie die Kamera initialisieren. Verwenden Sie die AppCapability-Klasse , um zu ermitteln, ob Ihre App Zugriff hat.

bool cameraCapabilityAccess = false;
private void CheckCameraAccessStatus()
{
    var status = AppCapability.Create("Webcam").CheckAccess();
    
    if (status == AppCapabilityAccessStatus.Allowed)
    {
        cameraCapabilityAccess = true;
        cameraButton.IsEnabled = true;
    }
    else
    {
        cameraCapabilityAccess = false;
        cameraButton.IsEnabled = false;
    }
}

Behandeln des Fehlers "Zugriff verweigert"

Die Windows-Kameraaufnahme-APIs geben den Fehler E_ACCESSDENIED zurück, wenn Apps versuchen, auf das Kameraaufnahmegerät zuzugreifen, wenn der Benutzer die Kamera auf der Seite "Datenschutzeinstellungen" der Kamera deaktiviert hat. Apps sollten beim Initialisieren des Aufnahmegeräts auf diesen Fehler überprüfen. Wenn die Initialisierung mit diesem Fehler fehlschlägt, empfiehlt es sich, den Benutzer zur Seite "Datenschutzeinstellungen" der Kamera zu leiten und den Zugriff für Ihre App potenziell zu aktivieren. Die Seite mit den Datenschutzeinstellungen der Kamera kann mit dem URI ms-settings:privacy-webcamgestartet werden.

Im folgenden Beispiel wird veranschaulicht, wie Sie beim Aufrufen von MediaCapture.InitializeAsync nach E_ACCESSDENIED suchen.

try
{
    await mediaCapture.InitializeAsync(mediaCaptureInitializationSettings);
}
catch (System.UnauthorizedAccessException ex)
{
    // E_ACCESSDENIED, 0x80070005 in hexadecimal, -2147024891 in decimal
    if (ex.HResult == -2147024891)
    {
        StatusTextBlock.Text = "Access to the camera has been denied." +
            "Click the Settings button to check the camera privacy settings";               
    }

    return;
}
...
// Launch the camera privacy Settings page
private async void LaunchSettingsButton_Click(object sender, RoutedEventArgs e)
{
    bool result = await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings:privacy-webcam"));
}

Im folgenden Beispiel wird die Behandlung des von IMFActivate::ActivateObject zurückgegebenen E_ACCESSDENIED Fehlers beim Initialisieren einer IMFMediaSource für ein Aufnahmegerät veranschaulicht.

IMFMediaSource* pSource = NULL;
IMFAttributes* pAttributes = NULL;
IMFActivate** ppDevices = NULL;

// Create an attribute store to specify the enumeration parameters.
HRESULT hr = MFCreateAttributes(&pAttributes, 1);
if (FAILED(hr))
{
    goto done;
}

// Source type: video capture devices
hr = pAttributes->SetGUID(
    MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,
    MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID
);
if (FAILED(hr))
{
    goto done;
}

// Enumerate devices.
UINT32 count;
hr = MFEnumDeviceSources(pAttributes, &ppDevices, &count);
if (FAILED(hr))
{
    goto done;
}

if (count == 0)
{
    hr = E_FAIL;
    goto done;
}

// Create the media source object.
hr = ppDevices[0]->ActivateObject(IID_PPV_ARGS(&pSource));
if (FAILED(hr))
{
    if (hr == E_ACCESSDENIED)
    {
        int response = MessageBox(hWnd, L"Access to the camera was denied. Open the camera privacy settings?", L"Error", MB_YESNO);
        if (response == IDYES)
        {
            ShellExecute(NULL, L"open", L"ms-settings:privacy-webcam", L"", L".", SW_SHOWDEFAULT);
        }
    } 
    goto done;
}

Implementieren des Fallbackverhaltens

Apps sollten die vorherigen Schritte implementieren, um den Benutzer zu benachrichtigen, den Benutzer zu erkennen und zu benachrichtigen, dass der Kamerazugriff aufgrund von Datenschutzeinstellungen eingeschränkt ist, und den Benutzer auf die Seite mit den Datenschutzeinstellungen der Kamera zu leiten, damit er seine Einstellungen aktualisieren kann. Nach diesen Schritten sollte die App die Kamerainitialisierung wiederholen, um festzustellen, ob der Zugriff gewährt wurde. Wenn der Benutzer die Aktualisierung seiner Einstellungen ablehnt, damit Ihre App auf die Kamera zugreifen kann, sollten Sie alternative Funktionen bereitstellen. Sie können beispielsweise Kamerafeatures deaktivieren, zu einem anderen Modus wechseln oder anstelle der Kameravorschau ein Platzhalterbild anzeigen.