Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Windows permet aux utilisateurs d’accorder ou de refuser l’accès à la caméra de l’appareil dans les paramètres Windows, sous Confidentialité & Sécurité -> Caméra. L’accès à la caméra peut être désactivé pour l’ensemble de l’appareil, pour toutes les applications non empaquetées ou pour les applications empaquetées individuelles. Cet article décrit les meilleures pratiques pour vérifier si votre application a accès à la caméra et gérer le cas où l’accès est refusé par l’utilisateur.
Rechercher l’accès avant d’initialiser la caméra
Pour les applications empaquetées, vous devez vérifier si votre application dispose d’un accès à la caméra avant d’initialiser la caméra. Utilisez la classe AppCapability pour déterminer si votre application a accès.
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;
}
}
Gérer l’erreur d’accès refusé
Les API de capture de caméra Windows retournent l’erreur E_ACCESSDENIED lorsque les applications tentent d’accéder à l’appareil photo si l’utilisateur a désactivé la caméra dans la page Paramètres de confidentialité de l’appareil photo. Les applications doivent vérifier cette erreur lors de l’initialisation de l’appareil de capture. Si l’initialisation échoue avec cette erreur, il est recommandé de diriger l’utilisateur vers la page Paramètres de confidentialité de l’appareil photo et d’activer potentiellement l’accès pour votre application. La page Paramètres de confidentialité de l’appareil photo peut être lancée à l’aide de l’URI ms-settings:privacy-webcam.
L’exemple suivant montre comment vérifier E_ACCESSDENIED lors de l'appel de MediaCapture.InitializeAsync.
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"));
}
L’exemple suivant illustre la gestion de l’erreur de E_ACCESSDENIED retournée par IMFActivate ::ActivateObject lors de l’initialisation d’un IMFMediaSource pour un appareil de capture.
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;
}
Implémenter le comportement de secours
Les applications doivent utiliser les étapes précédentes pour détecter l’accès à la caméra restreinte, alerter l’utilisateur et les diriger vers la page des paramètres de confidentialité de l’appareil photo. Une fois que l’utilisateur est retourné à partir de Paramètres, l’application peut réessayer l’initialisation de la caméra pour déterminer si l’accès a été accordé. Si l’accès à la caméra reste indisponible, fournissez d’autres fonctionnalités. Par exemple, vous pouvez désactiver les fonctionnalités de l’appareil photo, basculer vers un autre mode ou afficher une image d’espace réservé à la place de l’aperçu de l’appareil photo.
Windows developer