我想在实际打开相机之前确保应用程序具有访问相机的权限,这样如果应用程序没有权限,可以通知用户他们需要在操作系统中更改权限。
这是必要的原因是,当用户不小心拒绝了对相机的许可时,他将不得不导航到操作系统本身内的应用程序权限以更改权限。大多数用户可能不知道这一点,因此我想让他们知道。
在下面的示例中,我想检查应用程序是否有权访问相机。如果没有,请通知用户。
我该怎么做?
fromCamera: function (callback) {
// PERMISSION CHECK HERE -> if camera permission is FALSE show an alert to notify the user
navigator.notification.alert(
"This app does not have access to the camera. Blabla do this blabla",
["Ok"]
);
if (callback === undefined) throw 'undefined callback parameter!';
navigator.camera.getPicture(onCameraSuccess, onCameraFail, {
quality: 90,
encodingType: Camera.EncodingType.JPEG,
saveToPhotoAlbum: true,
allowEdit: false,
correctOrientation: true,
destinationType: Camera.DestinationType.FILE_URI
});
function onCameraSuccess(imageUri) {
app.log('onCameraSuccess: ' + imageUri);
callback([imageUri]);
}
function onCameraFail(message) {
app.log('Failed because: ' + message);
callback([]);
}
}
最佳答案
所以...我有点抱歉这么说,但这不是相机插件的问题。
我做了以下事情:
cordova 创建 cameracheck com.example.com cameracheck
cd cameracheck
cordova平台添加ios
cordova 插件添加 cordova-plugin-camera
cordova 插件添加 cordova-plugin-console
Cordova 构建
之后,我在 XCode 中打开应用程序并将代码编辑为标准代码。
<body>
<div class="app">
<h1>Apache Cordova</h1>
<div id="deviceready" class="blink">
<p class="event listening">Connecting to Device</p>
<p class="event received" onclick="openCamera()">Device is Ready</p>
</div>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
openCamera()
函数
function openCamera() {
navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
destinationType: Camera.DestinationType.FILE_URI });
function onSuccess(imageURI) {
var image = document.getElementById('myImage');
image.src = imageURI;
}
function onFail(message) {
alert('Failed because: ' + message);
}
}
我拒绝了相机访问并关闭了应用程序。在我重新打开它并按文本启动相机后,我收到一条消息,直接告诉我,无法访问相机。此外,插件会询问我是要打开设置还是只想关闭相机。请参阅下面的屏幕截图。
问题必须出在代码中的任何地方,或者您可能使用了已弃用的相机插件?您是否尝试更新它?
关于javascript - 如何在调用 camera.getPicture 之前检查相机权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31607497/