android - PhoneGap Capture 插件崩溃 Android

标签 android cordova phonegap-plugins

当我使用捕捉插件时,它总是在拍照后使应用程序崩溃。当我单击 Capture 按钮时,它会打开相机应用程序,我拍了一张照片,然后单击复选标记,然后该应用程序关闭并显示:“不幸的是,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 放在插件文件夹中。然后我构建了项目:

phonegap build android

这将 org.apache.cordova.file 放在插件文件夹中(因为 media-capture 依赖于它),在插件文件夹中创建了 android.json。它还创建 platforms/android 并将正确的 js 文件放入 platforms/android/assets/www/plugins 并将正确的 java 文件放入 platforms/android/src

我在 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

然后在我的安卓设备上运行,遇到上述问题

最佳答案

使用 logcat(与 Android SDK bundle 在一起)查看 phonegap 是否有任何错误消息。

关于android - PhoneGap Capture 插件崩溃 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282318/

相关文章:

java - 需要解释 OpenCV Android 行为

java - 对于同一个字符串,SQLite 的长度是否会返回与 Java 的长度方法不同的值?

iphone - iPhone、Android 和黑莓的移动开发

android - 在 Android 中使用 Constraint-Layout helper Flow 进行布局定位

android - greendao listview 实体中的所有数据

android - Flash 对象未显示在 phonegap android 中

cordova - ionic : cordova-plugin-inappbrowser set default target

java - Phonegap - 插件和服务之间的通信

ios - 在 Phonegap iOS 应用程序中使用预填充数据库

android - 错误 : ENOENT, 没有这样的文件或目录 - PhoneGap