android - NativeScript Camera takePicture 方法在 Android 中不返回 promise (但在 iOS 中返回 promise )

标签 android camera nativescript

运行测试相机示例 see nativesript-camera repo ,在 iOS 模拟器中一切正常,并且图像(从图库中选择)显示在屏幕上。但是,当我在 Android 模拟器上测试相同的代码时,在相机打开并拍摄照片并单击“保存”后,照片不会显示在屏幕上。因此,我通过在 promise 应该返回之后添加一个 console.log 来进行测试,以查看我得到的结果:

takePicture({width: 180, height: 180, keepAspectRatio: false, saveToGallery: saveToGallery}).
        then((imageAsset) => {
            console.log("IMAGE ASSET", imageAsset);
            let source = new imageSourceModule.ImageSource();
            source.fromAsset(imageAsset).then((source) => {
                console.log(`Size: ${source.width}x${source.height}`);
            });
            page.bindingContext.set("cameraImage", imageAsset);
        }, 
        (err) => {
            console.log("Error -> " + err.message);
        });

IMAGE ASSET 控制台日志从未在终端中显示,我什么意思都没有。连我传递的字符串都没有,也没有错误。当我在 iOS 模拟器中运行应用程序时,console.log 确实显示在终端中,但在 Android 中什么也没有显示。我正在使用 Android Studio 虚拟设备(运行 Android 7.1 的 Nexus 5X)。

我尝试网上搜索看看其他人是否也遇到过这个问题。找不到任何东西。有人遇到过这个问题并能够解决这个问题吗?

===更新===

所以我继续创建一个新项目并在其中添加 takePicture 方法。它现在正在返回 promise ,但我在 Android 模拟器上收到以下错误:

An uncaught Exception occurred on "main" thread.
com.tns.NativeScriptException: 
Calling js method onScanCompleted failed

TypeError: trace.isEnabled is not a function
File: "file:///data/data/org.nativescript.cameraproject/files/app/tns_modules/nativescript-camera/nativescript-camera.js, line: 63, column: 50

StackTrace: 
    Frame: function:'onScanCompleted', file:'file:///data/data/org.nativescript.cameraproject/files/app/tns_modules/nativescript-camera/nativescript-camera.js', line: 63, column: 51


    at com.tns.Runtime.callJSMethodNative(Native Method)
    at com.tns.Runtime.access$2400(Runtime.java:33)
    at com.tns.Runtime$3.run(Runtime.java:1214)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6119)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

当我将 saveToGallery 设置为 false 时,错误消失了...

最佳答案

我相信您有一个编码错误;

takePicture({width: 180, height: 180, keepAspectRatio: false, saveToGallery: saveToGallery}).
        then((imageAsset) => {
            console.log("IMAGE ASSET", imageAsset);
            let source = new imageSourceModule.ImageSource();
            source.fromAsset(imageAsset).then((source) => {
                console.log(`Size: ${source.width}x${source.height}`);
            });
            page.bindingContext.set("cameraImage", imageAsset);
        }, 
        (err) => {
            console.log("Error -> ",  err, err.stack);
        });

我很确定你的 error 例程会按照编写的方式抛出错误,并且当它在 Promise 的 catch 中抛出错误时,它会被默默地吃掉。

如果我猜测根本原因,既然您提到了 Android 7,我会大胆猜测您的应用程序没有所需的权限。所以它会抛出一个错误,然后触发您的错误例程,该例程会抛出一个错误,使一切都消失......


更新了新问题的答案

要使用 NativeScript-Camera v3.0.0,您必须使用 TNS 3.0.0 核心模块。如果您想使用 TNS 核心模块 2.5.0(或之前版本),您需要使用 NativeScript-Camera v0.0.8 或更早版本...

关于android - NativeScript Camera takePicture 方法在 Android 中不返回 promise (但在 iOS 中返回 promise ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43680171/

相关文章:

ios - 如何通过触摸使方形叠加层出现?

Android 库 list

android - onEditorAction : "unmatched pair of setHasTransientState calls" 的奇怪错误

c++ - GLFW 相机和鼠标控制

iOS 截取多个屏幕截图

android - 用对象项填充 listView 的正确方法?

css - 有没有办法提高 NativeScript 中 scss 文件加载的性能?

javascript - 如何在 Nativescript 中实现 Java 方法?

android - 检测Android应用程序进入后台

android - 如何从android中项目的根目录添加另一个gradle文件