Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Windows memungkinkan pengguna untuk memberikan atau menolak akses ke kamera perangkat di Pengaturan Windows, di bawah Privasi & Keamanan -> Kamera. Akses kamera dapat dinonaktifkan untuk seluruh perangkat, untuk semua aplikasi yang tidak dikemas, atau untuk aplikasi paket individual. Artikel ini menjelaskan praktik terbaik untuk memeriksa apakah aplikasi Anda memiliki akses ke kamera dan menangani kasus di mana akses ditolak oleh pengguna.
Periksa akses sebelum menginisialisasi kamera
Untuk aplikasi kemasan, Anda harus memeriksa apakah aplikasi Anda memiliki akses kamera sebelum menginisialisasi kamera. Gunakan kelas AppCapability untuk menentukan apakah aplikasi Anda memiliki akses.
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;
}
}
Menangani kesalahan akses ditolak
API penangkapan kamera Windows akan mengembalikan kesalahan E_ACCESSDENIED ketika aplikasi mencoba mengakses perangkat pengambilan kamera jika pengguna telah menonaktifkan kamera di halaman Pengaturan privasi kamera. Aplikasi harus memeriksa kesalahan ini saat menginisialisasi perangkat pengambilan. Jika inisialisasi gagal dengan kesalahan ini, disarankan agar Anda mengarahkan pengguna ke halaman Pengaturan privasi kamera dan berpotensi mengaktifkan akses untuk aplikasi Anda. Halaman Pengaturan privasi kamera dapat diluncurkan menggunakan URI ms-settings:privacy-webcam.
Contoh berikut mengilustrasikan cara memeriksa E_ACCESSDENIED saat memanggil 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"));
}
Contoh berikut mengilustrasikan penanganan kesalahan E_ACCESSDENIED yang dikembalikan dari IMFActivate::ActivateObject saat menginisialisasi IMFMediaSource untuk perangkat penangkapan.
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;
}
Menerapkan perilaku fallback
Aplikasi harus menerapkan langkah-langkah sebelumnya untuk memperingatkan pengguna mendeteksi dan memperingatkan pengguna bahwa akses kamera dibatasi karena pengaturan privasi dan untuk mengarahkan pengguna ke halaman Pengaturan privasi kamera untuk memungkinkan mereka memperbarui pengaturan mereka. Setelah langkah-langkah ini, aplikasi harus mencoba kembali inisialisasi kamera untuk melihat apakah akses telah diberikan. Jika pengguna menolak untuk memperbarui pengaturan mereka untuk memungkinkan aplikasi Anda mengakses kamera, pertimbangkan untuk menyediakan fungsionalitas alternatif. Misalnya, Anda dapat menonaktifkan fitur kamera, beralih ke mode yang berbeda, atau menampilkan gambar tempat penampung sebagai pengganti pratinjau kamera.
Windows developer