Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. 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 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.
- C#
- C++
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.
- C#
- C++
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
As aplicações devem usar os passos anteriores para detetar o acesso restrito às câmaras, alertar o utilizador e encaminhá-lo para a página de definições de privacidade da câmara. Depois de o utilizador regressar das Definições, a aplicação pode tentar novamente a inicialização da câmara para determinar se o acesso foi concedido. Se o acesso à câmara continuar indisponível, forneça 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.
Windows developer