Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows, kullanıcıların Gizlilik ve Güvenlik -> Kamera altındaki Windows Ayarları'nda cihazın kamerasına erişim izni vermesine veya erişimi reddetmesine izin verir. Kamera erişimi tüm cihaz için, paketlenmemiş tüm uygulamalar veya tek tek paketlenmiş uygulamalar için devre dışı bırakılabilir. Bu makalede, uygulamanızın kameraya erişimi olup olmadığını denetlemeye ve kullanıcı tarafından erişimin reddedildiği olayı işlemeye yönelik en iyi yöntemler açıklanmaktadır.
Kamerayı başlatmadan önce erişimi denetleyin
Paketlenmiş uygulamalar için, kamerayı başlatmadan önce uygulamanızın kamera erişimi olup olmadığını denetlemeniz gerekir. Uygulamanızın erişimi olup olmadığını belirlemek için AppCapability sınıfını kullanın.
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;
}
}
Erişim reddedildi hatasını işleme
Windows kamera yakalama API'leri, kullanıcı kamera gizlilik Ayarları sayfasında kamerayı devre dışı bırakmışsa uygulamalar kamera yakalama cihazına erişmeye çalıştığında hata E_ACCESSDENIED döndürür. Uygulamalar yakalama cihazını başlatırken bu hatayı denetlemelidir. Başlatma işlemi bu hatayla başarısız olursa, kullanıcıyı kamera gizlilik Ayarları sayfasına yönlendirmeniz ve uygulamanız için erişimi etkinleştirmeniz önerilir. Kamera gizlilik Ayarları sayfası URI ms-settings:privacy-webcamkullanılarak başlatılabilir.
Aşağıdaki örnek, MediaCapture.InitializeAsyncçağrılırken E_ACCESSDENIED hatasının nasıl kontrol edileceğini göstermektedir.
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"));
}
Aşağıdaki örnek, bir yakalama cihazı için bir IMFMediaSource başlatılırken IMFActivate::ActivateObject'den döndürülen E_ACCESSDENIED hatasının nasıl ele alınacağını göstermektedir.
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;
}
Geri dönüş davranışını uygulama
Uygulamalar, kısıtlı kamera erişimini algılamak, kullanıcıyı uyarmak ve kamera gizlilik ayarları sayfasına yönlendirmek için önceki adımları kullanmalıdır. Kullanıcı Ayarlar'dan döndükten sonra uygulama, erişim verilip verilmediğini belirlemek için kamera başlatmayı yeniden deneyebilir. Kamera erişimi kullanılamıyorsa alternatif işlevler sağlayın. Örneğin, kamera özelliklerini devre dışı bırakabilir, farklı bir moda geçebilir veya kamera önizlemesinin yerine yer tutucu bir görüntü görüntüleyebilirsiniz.
Windows developer