Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Windows permite que os usuários concedam ou neguem acesso à câmera do dispositivo nas Configurações do Windows, em Privacidade e Segurança -> Câmera. O acesso à câmara pode ser desativado para todo o dispositivo, para todas as aplicações não embaladas ou para aplicações individuais em pacote. 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;
}
}
Tratar o erro de acesso negado
As APIs de captura de câmera do Windows retornarão a E_ACCESSDENIED de erro quando os aplicativos tentarem acessar o dispositivo de captura de câmera se o usuário tiver desativado a câmera na página Configurações de privacidade da câmera. Os aplicativos devem verificar se há 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, potencialmente, 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 se há 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 a manipulação do erro de E_ACCESSDENIED retornado de
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 comportamento de fallback
Os aplicativos devem implementar as etapas anteriores para alertar o usuário, detetar e alertar o usuário de que o acesso à câmera é restrito devido às configurações de privacidade e direcionar o usuário para a página Configurações de privacidade da câmera para permitir que ele atualize suas configurações. Após essas etapas, o aplicativo deve tentar novamente a inicialização da câmera para ver se o acesso foi concedido. Se o usuário se recusar a atualizar suas configurações para permitir que seu aplicativo acesse a câmera, considere fornecer funcionalidades alternativas. Por exemplo, pode desativar os recursos da câmara, alternar para um modo diferente ou exibir uma imagem genérica no lugar da visualização da câmara.