javascript 适用于 Android 的 PhoneGap 相机 API - 未捕获的异常
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11461774/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
PhoneGap Camera API for Android - Uncaught Exception
提问by dhiku
I am trying to run the Camera API using Phone gap in Android, and i am running in all sort of issues.
我正在尝试使用 Android 中的 Phone gap 运行 Camera API,并且我遇到了各种问题。
I just copied phonegap camera example.
我刚刚复制了phonegap相机的例子。
I am getting the following error
我收到以下错误
07-12 18:18:00.706: E/Web Console(17837): Uncaught TypeError: Cannot read property 'SAVEDPHOTOALBUM' of undefined at file:///android_asset/www/index.html:98
07-12 18:17:59.456: E/Web Console(17837): Uncaught ReferenceError: Camera is not defined at file:///android_asset/www/index.html:67
I tried all the other destination type. It dint work
我尝试了所有其他目的地类型。它有效
destinationType: destinationType.FILE_URI
destinationType: Camera.DestinationType.FILE_URI
destinationType: destinationType.DATA_URL
Also i added the permission for Camera and hardware camera permission. But still it failed
我还添加了相机和硬件相机权限的权限。但还是失败了
Here is the following
以下是
<!DOCTYPE html>
<html>
<head>
<title>Capture Photo</title>
<script type="text/javascript" charset="utf-8" src="phonegap-1.0.0.js"></script>
<script type="text/javascript" charset="utf-8">
var pictureSource; // picture source
var destinationType; // sets the format of returned value
// Wait for PhoneGap to connect with the device
//
document.addEventListener("deviceready",onDeviceReady,false);
// PhoneGap is ready to be used!
//
function onDeviceReady() {
pictureSource=navigator.camera.PictureSourceType;
destinationType=navigator.camera.DestinationType;
}
// Called when a photo is successfully retrieved
//
function onPhotoDataSuccess(imageData) {
// Uncomment to view the base64 encoded image data
// console.log(imageData);
// Get image handle
//
var smallImage = document.getElementById('smallImage');
// Unhide image elements
//
smallImage.style.display = 'block';
// Show the captured photo
// The inline CSS rules are used to resize the image
//
smallImage.src = "data:image/jpeg;base64," + imageData;
}
// Called when a photo is successfully retrieved
//
function onPhotoURISuccess(imageURI) {
// Uncomment to view the image file URI
// console.log(imageURI);
// Get image handle
//
var largeImage = document.getElementById('largeImage');
// Unhide image elements
//
largeImage.style.display = 'block';
// Show the captured photo
// The inline CSS rules are used to resize the image
//
largeImage.src = imageURI;
}
// A button will call this function
//
function capturePhoto() {
// Take picture using device camera and retrieve image as base64-encoded string
navigator.camera.getPicture(onPhotoDataSuccess, onFail, {destinationType: Camera.DestinationType.FILE_URI, quality: 50 });
}
// A button will call this function
//
function capturePhotoEdit() {
// Take picture using device camera, allow edit, and retrieve image as base64-encoded string
navigator.camera.getPicture(onPhotoDataSuccess, onFail, { destinationType: Camera.DestinationType.FILE_URI,quality: 20, allowEdit: true });
}
// A button will call this function
//
function getPhoto(source) {
// Retrieve image file location from specified source
navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50,
destinationType: Camera.DestinationType.FILE_URI,
sourceType: source });
}
// Called if something bad happens.
//
function onFail(message) {
alert('Failed because: ' + message);
}
</script>
</head>
<body>
<button onclick="capturePhoto();">Capture Photo</button> <br>
<button onclick="capturePhotoEdit();">Capture Editable Photo</button> <br>
<button onclick="getPhoto(pictureSource.PHOTOLIBRARY);">From Photo Library</button><br>
<button onclick="getPhoto(pictureSource.SAVEDPHOTOALBUM);">From Photo Album</button><br>
<img style="display:none;width:60px;height:60px;" id="smallImage" src="" />
<img style="display:none;" id="largeImage" src="" />
</body>
</html>
回答by barners
Ensure you are including the correct (latest) cordovafile in your HTML.
确保在 HTML中包含正确的(最新的)cordova文件。
I had the same problem and I was including
我有同样的问题,我包括
cordova-1.8.0.js
rather than
而不是
cordova-2.4.0.js
回答by Nullify
You can try this for Capturing Photo using phonegap
您可以尝试使用 phonegap 捕获照片
<script type="text/javascript" charset="utf-8" src="cordova-2.5.0.js"></script>
<script type="text/javascript" charset="utf-8">
var pictureSource; // picture source
var destinationType; // sets the format of returned value
// Wait for Cordova to connect with the device
//
document.addEventListener("deviceready",onDeviceReady,false);
// Cordova is ready to be used!
//
function onDeviceReady() {
pictureSource=navigator.camera.PictureSourceType;
destinationType=navigator.camera.DestinationType;
}
// Called when a photo is successfully retrieved
//
function onPhotoDataSuccess(imageData) {
// Uncomment to view the base64 encoded image data
//alert(imageData);
// Get image handle
//
var smallImage = document.getElementById('smallImage');
// Unhide image elements
//
smallImage.style.display = 'block';
// Show the captured photo
// The inline CSS rules are used to resize the image
//
smallImage.src = "data:image/jpeg;base64," + imageData;
}
// Called when a photo is successfully retrieved
//
function onPhotoURISuccess(imageURI) {
alert("inside large image")
// Uncomment to view the image file URI
// console.log(imageURI);
// Get image handle
//
var largeImage = document.getElementById('largeImage');
// Unhide image elements
//
largeImage.style.display = 'block';
// Show the captured photo
// The inline CSS rules are used to resize the image
//
largeImage.src = imageURI;
}
// A button will call this function
//
function capturePhoto() {
// Take picture using device camera and retrieve image as base64-encoded string
navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50,
destinationType: destinationType.DATA_URL });
}
// A button will call this function
//
function capturePhotoEdit() {
// Take picture using device camera, allow edit, and retrieve image as base64-encoded string
navigator.camera.getPicture(onPhotoDataSuccess, onFail,
{ quality: 20, allowEdit: true,
destinationType: destinationType.DATA_URL });
}
// A button will call this function
//
function getPhoto(source) {
// Retrieve image file location from specified source
navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50,
destinationType: destinationType.FILE_URI,
sourceType: source });
}
// Called if something bad happens.
//
function onFail(message) {
alert('Failed because: ' + message);
}
</script>
</head>
<body>
<button onclick="capturePhoto();">Capture Photo</button> <br>
<button onclick="capturePhotoEdit();">Capture Editable Photo</button> <br>
<button onclick="getPhoto(pictureSource.PHOTOLIBRARY);">From Photo Library</button><br>
<button onclick="getPhoto(pictureSource.SAVEDPHOTOALBUM);">From Photo Album</button><br>
<img style="display:none;width:60px;height:60px;" id="smallImage" src="" />
<img style="display:none;" id="largeImage" src="" />
</body>
</html>
回答by Shady Sherif
I had the same problem I solved it on three steps
我遇到了同样的问题,我分三步解决了
The javascript include
javascript 包括
I used cordova.js ONLY and removed any phonegap.js
我只使用了cordova.js并删除了任何phonegap.js
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
Installing the plugin(s)
安装插件
You must install the camera plugin using command line; xml only doesn't work
您必须使用命令行安装相机插件;仅 xml 不起作用
cordova plugin add org.apache.cordova.camera
Use right android-package
使用正确的 android-package
In your xml you may are using org.apache.cordova.CameraLauncher
it is wrong and will give you NullPointer exception.
The right package could be included like that
在您的 xml 中,您可能正在使用org.apache.cordova.CameraLauncher
它是错误的,并且会给您 NullPointer 异常。可以像这样包含正确的包
<feature name="Camera">
<param name="ios-package" value="CDVCamera" />
<param name="android-package" value="org.apache.cordova.camera.CameraLauncher" />
</feature>
Give them a try! Thanks :)
试试看吧!谢谢 :)
回答by sharma_kunal
2.0.0.js this may solve your problem
2.0.0.js 这可能会解决你的问题
you code is right only check for these cordova-2.0.0.js files only
您的代码是正确的,仅检查这些cordova-2.0.0.js 文件
回答by Muhammad Riyaz
Just adding <script src="phonegap.js"></script>
in my html solved it for me!
And also I had <script src="cordova.js"></script>
, so removed it and kept only<script src="phonegap.js"></script>
.
只需添加<script src="phonegap.js"></script>
我的 html 即可为我解决!
我也有<script src="cordova.js"></script>
,所以删除它并只保留<script src="phonegap.js"></script>
.
回答by tttpapi
I had the same problem.
我有同样的问题。
You are using pictureSource.PHOTOLIBRARY
and pictureSource.SAVEDPHOTOALBUM
directly in the code.
您正在代码中直接使用pictureSource.PHOTOLIBRARY
和pictureSource.SAVEDPHOTOALBUM
。
The problem is that the html is loaded before the javascript and then you are trying to reach pictureSource
. But has not been specified yet.
问题是 html 在 javascript 之前加载,然后您试图访问pictureSource
. 但尚未明确。
You have to use this when the app is fully loaded (eg. use jQuery event in documents.ready or some alternative in javascript)
当应用程序完全加载时,您必须使用它(例如,在documents.ready 中使用jQuery 事件或在javascript 中使用一些替代方法)