Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Windows permite que os usuários concedam ou neguem acesso à câmera do dispositivo nas Configurações do Windows, em Privacidade & Segurança –> Câmera. O acesso à câmera pode ser desabilitado para todo o dispositivo, para todos os aplicativos não empacotados ou para aplicativos empacotados individuais. Este artigo descreve as práticas recomendadas para verificar se seu aplicativo tem acesso à câmera e lidar com o caso em que o acesso é negado pelo usuário.
Verifique o acesso antes de inicializar a câmera
Para aplicativos empacotados, você deve verificar se seu aplicativo tem acesso à câmera antes de inicializar a câmera. Use a classe AppCapability para determinar se seu aplicativo tem acesso.
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;
}
}
Lidar com o erro de acesso negado
As APIs de captura de câmera do Windows retornarão o erro E_ACCESSDENIED quando os aplicativos tentarem acessar o dispositivo de captura de câmera se o usuário tiver desabilitado a câmera na página Configurações de privacidade da câmera. Os aplicativos devem verificar esse erro ao inicializar o dispositivo de captura. Se a inicialização falhar com esse erro, é recomendável direcionar o usuário para a página Configurações de privacidade da câmera e, possivelmente, habilitar o acesso para seu aplicativo. A página Configurações de privacidade da câmera pode ser iniciada usando o URI ms-settings:privacy-webcam.
O exemplo a seguir ilustra como verificar E_ACCESSDENIED ao chamar 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"));
}
O exemplo a seguir ilustra como lidar com o erro de E_ACCESSDENIED retornado de IMFActivate::ActivateObject ao inicializar um IMFMediaSource para um dispositivo de captura.
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;
}
Implementar o comportamento de contingência
Os aplicativos devem usar as etapas anteriores para detectar o acesso restrito à câmera, alertar o usuário e direcioná-los para a página de configurações de privacidade da câmera. Depois que o usuário retorna de Configurações, o aplicativo pode tentar novamente a inicialização da câmera para determinar se o acesso foi concedido. Se o acesso à câmera permanecer indisponível, forneça funcionalidade alternativa. Por exemplo, você pode desativar os recursos da câmera, alternar para um modo diferente ou exibir uma imagem temporária no lugar da pré-visualização da câmera.
Windows developer