无法读取未定义的属性“getPicture” - 离子相机

Posted

技术标签:

【中文标题】无法读取未定义的属性“getPicture” - 离子相机【英文标题】:Cannot read property 'getPicture' of undefined - ionic camera 【发布时间】:2014-09-18 11:00:55 【问题描述】:

此代码返回:

 Cannot read property 'getPicture' of undefined

不知道我做错了什么,你能帮我写代码吗?

我的应用:

angular.module('Todo', ['ionic', 'Todo.controllers','ngStorage', 'Todo.services', 'ngCordova'])

我的控制器:

.controller('profileEditCtrl', function($scope,Camera, $localStorage,
 $cordovaCamera) 
       
        $scope.$storage = $localStorage.$default( data:[]);

    $scope.takePicture = function() 
    
        navigator.camera.getPicture(onSuccess, onFail,  quality: 50,
            destinationType: Camera.DestinationType.DATA_URL ); 

      function onSuccess(imageData) 
        var image = document.getElementById('myImage');
        image.src ="data:image/jpeg;base64," + imageData;       
    

    function onFail(message) 
        alert('Failed because: ' + message);
           

);

【问题讨论】:

你安装了这个插件吗?又名cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git 和安卓更新后? 顺便说一句,对 Ionic 没有依赖性。 我安装了那个插件 我们可以聊聊吗?有点像这里的手机坏了...... ***.com/a/25926840/237209 【参考方案1】:

你的代码是正确的,只需添加一个带有ng-click="takePicture()"html按钮。

这里没有问题,确定是浏览器"cannot read property 'getPicture' of undefined"因为没有配置 对于您定义的移动摄像头,这意味着您应该在 真正的设备使用:

> ionic run android.

请注意,谷歌浏览器的新更新有一项新功能,即 帮助您在浏览器上测试您的设备(如果它已连接到 PC/笔记本电脑,用于测试转到 chrome 的导航面板 >> 更多工具 >> 检查设备 或者直接去这个链接:

chrome://inspect/#devices

如果您在应用程序中安装了插件 cordova plugin add org.apache.cordova.camera,我确信您的相机将正常工作, 我希望这可以帮助你。

【讨论】:

你试过这个真的有效吗,在我的情况下它不起作用 你的建议没问题。我在chrome://inspect/#devices 上进行了测试,效果很好。【参考方案2】:

在我的科尔多瓦项目尝试了各种解决方案但没有成功后,我只是继续使用built-in javascript APIs。本质上:

async function startCapturing()    // get ready to shoot
    await getPermission('android.permission.CAMERA');
    let stream = await navigator.mediaDevices.getUserMedia( video: width: 480, height: 320, facingMode:'environment' , audio: false );
    let video = document.getElementById("pVideo");   // a <video> element
    video.srcObject = stream;
    video.play();
    video.style.display = "block";


function shootPhoto()       // take a snapshot
    let video = document.getElementById("pVideo");
    let canvas = document.getElementById("pCanvas");  // a <canvas> element
    let context = canvas.getContext('2d');
    context.drawImage(video,0,0,480,320);
    document.getElementById('fsPhotoI').src = Photo.current.src = canvas.toDataURL('image/png');
    Photo.current.changed = Profile.current.changed = true;
    video.style.display = "none";

特别是,一些插件对我不起作用,因为它们无法立即使用 Android 后置摄像头。 getUserMedia(...) 中的以下内容可以解决问题:

facingMode:'environment'

还要确保您在 AndroidManifest.xml 中拥有 CAMERA 权限。

【讨论】:

以上是关于无法读取未定义的属性“getPicture” - 离子相机的主要内容,如果未能解决你的问题,请参考以下文章

带有 Ionic 4 的 SQLite?无法读取未定义类型错误的属性“then”:无法读取未定义的属性“then”

`无法读取未定义的属性(读取'组件')`

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

使用地图时反应'无法读取未定义的属性'

如何使用自定义错误消息捕获“TypeError:无法读取未定义的属性(读取'0')”?

查询返回错误“无法读取未定义的属性(读取'节点')”