运行测试相机示例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)。
我尝试在线搜索,看看其他人是否遇到过这个问题。找不到任何东西。有没有人碰到这个并且能够解决这个问题?
=== UPDATE ===
所以我继续创建了一个新项目并在其中添加了takePicture方法。它现在正在返回承诺,但我在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时错误消失了......
答案 0 :(得分:0)
我相信你有编码错误;
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或更早版本...