Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Windows umožňuje uživatelům udělit nebo odepřít přístup ke kameře zařízení v nastavení Windows v části Ochrana osobních údajů a zabezpečení -> Kamera. Přístup k fotoaparátu je možné zakázat pro celé zařízení, pro všechny rozbalené aplikace nebo pro jednotlivé zabalené aplikace. Tento článek popisuje osvědčené postupy pro kontrolu, jestli má vaše aplikace přístup ke kameře, a řeší případ odepření přístupu uživatelem.
Kontrola přístupu před inicializací kamery
U zabalených aplikací byste měli před inicializací fotoaparátu zkontrolovat, jestli má vaše aplikace přístup k fotoaparátu. Pomocí třídy AppCapability určete, jestli má vaše aplikace přístup.
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;
}
}
Zpracování chyby odepření přístupu
Rozhraní API pro zachytávání kamery ve Windows vrátí chybu E_ACCESSDENIED, když se aplikace pokusí získat přístup k zařízení kamery, pokud uživatel zakázal kameru na stránce Nastavení ochrany osobních údajů kamery. Aplikace by při inicializaci zařízení pro zachytávání měly zkontrolovat tuto chybu. Pokud inicializace selže s touto chybou, doporučujeme uživatele nasměrovat na stránku Nastavení ochrany osobních údajů fotoaparátu a potenciálně povolit přístup pro vaši aplikaci. Stránku Nastavení ochrany osobních údajů fotoaparátu lze spustit pomocí identifikátoru URI ms-settings:privacy-webcam.
Následující příklad ukazuje, jak zkontrolovat E_ACCESSDENIED při volání 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"));
}
Následující příklad ukazuje zpracování chyby E_ACCESSDENIED vrácené z IMFActivate::ActivateObject při inicializaci IMFMediaSource pro zachytávací zařízení.
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;
}
Implementace náhradního chování
Aplikace by měly implementovat předchozí kroky, aby detekovaly a upozornily uživatele na to, že přístup k fotoaparátu je omezen z důvodu nastavení ochrany osobních údajů, a aby uživatele nasměrovaly na stránku nastavení ochrany osobních údajů fotoaparátu, kde mohou upravit svá nastavení. Po těchto krocích by aplikace měla zkusit inicializaci fotoaparátu zopakovat a zjistit, jestli byl udělen přístup. Pokud uživatel odmítne aktualizovat nastavení tak, aby mohla vaše aplikace přistupovat k fotoaparátu, zvažte poskytnutí alternativních funkcí. Můžete například zakázat funkce fotoaparátu, přepnout do jiného režimu nebo místo náhledu fotoaparátu zobrazit zástupný obrázek.
Windows developer