当我使用捕获插件时,它总是在拍照后崩溃应用程序。当我单击“捕获”按钮时,它会打开相机应用程序,我会拍照,然后单击复选标记,然后应用程序关闭并说:“不幸的是,HelloWorld已经停止了。”然后,如果我查看图库应用程序,照片就在那里。有什么我做错了吗?或者插件有什么问题吗?
这就是我的所作所为:
我创建了一个全新的phonegap 3.x(确切地说是3.1.0-0.15.0)项目
phonegap create exampleProject
cd exampleProject
并安装了捕获插件
phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-media-capture.git
将org.apache.cordova.media-capture放在plugins文件夹中。然后我建立了项目:
phonegap build android
这把org.apache.cordova.file放在plugins文件夹中(因为media-capture依赖于它),在plugins文件夹中创建了android.json。它还创建平台/ android并将正确的js文件放在platforms / android / assets / www / plugins和平台/ android / src中的正确java文件
我在index.html中添加了以下内容:
<input type="button" value="Capture" onClick="capture();" />
这是整个文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="format-detection" content="telephone=no" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
<link rel="stylesheet" type="text/css" href="css/index.css" />
<title>Hello World</title>
</head>
<body>
<div class="app">
<h1>PhoneGap</h1>
<div id="deviceready" class="blink">
<p class="event listening">Connecting to Device</p>
<p class="event received">Device is Ready</p>
</div>
<input type="button" value="Capture" onClick="capture();" />
</div>
<script type="text/javascript" src="phonegap.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript">
app.initialize();
</script>
</body>
</html>
将capture()和getErrorMessage()函数添加到index.js的末尾:
var app = {
// Application Constructor
initialize: function() {
this.bindEvents();
},
// Bind Event Listeners
//
// Bind any events that are required on startup. Common events are:
// 'load', 'deviceready', 'offline', and 'online'.
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicity call 'app.receivedEvent(...);'
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function(id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
console.log('Received Event: ' + id);
}
};
function capture() {
var options = { limit: 1 };
try {
navigator.device.capture.captureImage(
function(response) {
alert("success: response=" + stringify(response));
},
function(CaptureError) {
alert('Error: ' + getErrorMessage(CaptureError));
},
options
);
} catch(e) {
alert("catch e="+e);
}
}
function getErrorMessage(CaptureError) {
var errorMessage = 'An unknown error occured while trying to get your media, please try again.';
switch(CaptureError.code) {
case CaptureError.CAPTURE_NOT_SUPPORTED:
errorMessage = 'This app does not support the media type.';
break;
case CaptureError.CAPTURE_NO_MEDIA_FILES:
errorMessage = 'No media files returned.';
break;
case CaptureError.CAPTURE_INTERNAL_ERR:
errorMessage = 'The capture process experienced an internal error.';
break;
case CaptureError.CAPTURE_APPLICATION_BUSY:
errorMessage = 'The application was too busy with something else to handle the media capture.';
break;
case CaptureError.CAPTURE_INVALID_ARGUMENT:
errorMessage = 'Values submitted for capture were out of range, notify support.';
break;
case 3:
errorMessage = 'Did you cancel? Please try again.';
break;
default:
break;
}
return errorMessage;
}
然后我构建应用程序:
phonegap build android
在我的Android设备上运行它并体验上述问题
答案 0 :(得分:1)
使用logcat(与Android SDK捆绑在一起)查看是否有任何来自phonegap的错误消息。