Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows ermöglicht Benutzern, unter "Datenschutz und Sicherheit –> Kamera" den Zugriff auf die Kamera des Geräts in den Windows-Einstellungen zu gewähren oder zu verweigern. 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 Sie den Zugriff, bevor Sie die Kamera initialisieren
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 festzustellen, 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;
}
}
Umgang mit dem Fehler "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 mithilfe des URI-ms-settings:privacy-webcamgestartet werden.
Das folgende Beispiel zeigt, wie Sie beim Aufruf von MediaCapture.InitializeAsync auf E_ACCESSDENIED prüfen.
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"));
}
Das folgende Beispiel veranschaulicht den Umgang mit dem Fehler E_ACCESSDENIED, der von IMFActivate::ActivateObject zurückgegeben wird, wenn eine IMFMediaSource für ein Gerät initialisiert wird.
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;
}
Implementierung des Fallback-Verhaltens
Apps sollten die vorangegangenen Schritte implementieren, um den Benutzer zu warnen, dass der Zugriff auf die Kamera aufgrund von Datenschutzeinstellungen eingeschränkt ist, und um den Benutzer auf die Seite mit den Datenschutzeinstellungen der Kamera zu leiten, um ihm die Möglichkeit zu bieten, seine Einstellungen zu aktualisieren. 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.
Windows developer