簡體   English   中英

NativeScript Camera的takePicture方法在Android中不返回承諾(但在iOS中)

[英]NativeScript Camera takePicture method not returning promise in Android (but does in iOS)

運行test-camera示例, 請參閱nativesript-camera repo ,在iOS模擬器中一切正常,並且圖像(從圖庫中選擇)顯示在屏幕上。 但是,當我運行Android模擬器測試相同的代碼時,在打開相機並拍攝照片並單擊“保存”后,該照片不會顯示在屏幕上。 因此,我通過在應許返回后立即添加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方法。 現在正在返回承諾,但是我在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例程將以編寫方式引發錯誤,並且當它在承諾的承諾范圍內引發錯誤時,它會被靜默吃掉。

如果我猜到了根本原因,那么自從您提到Android 7以來,我敢猜測您的應用沒有所需的權限。 因此,它拋出一個錯誤,然后命中了您的錯誤例程,該例程引發了錯誤,一切都消失了。


新問題的更新答案

要使用NativeScript-Camera v3.0.0,您必須使用TNS 3.0.0核心模塊。 如果要使用TNS核心模塊2.5.0(或更早版本),則需要使用NativeScript-Camera v0.0.8或更早版本...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM