Appcelerator Android Camera始终关闭应用程序

时间:2016-11-30 10:09:41

标签: android titanium appcelerator titanium-mobile

我使用Appcelerator(Titanium SDK)制作应用程序。 我打开相机时遇到问题,我已经在tiapp.xml中设置了相机权限。 我尝试使用来自厨房水槽钛的来源。

这是我的代码

var win;

function fireUpTheCamera() {
    if (Ti.Platform.osname === 'android'|| Ti.Platform.osname == "iphone" || Ti.Platform.osname == 'ipad') {
        win.removeEventListener('focus', fireUpTheCamera);
    }
    Titanium.Media.showCamera({

        success:function(event) {
            var cropRect = event.cropRect;
            var image = event.media;

            Ti.API.debug('Our type was: '+event.mediaType);
            if(event.mediaType == Ti.Media.MEDIA_TYPE_PHOTO)
            {
                var imageView = Ti.UI.createImageView({
                    width:win.width,
                    height:win.height,
                    image:event.media
                });
                win.add(imageView);
            }
            else
            {
                alert("got the wrong type back ="+event.mediaType);
            }
        },
        cancel:function() {
        },
        error:function(error) {
            // create alert
            var a = Titanium.UI.createAlertDialog({title:'Camera'});

            // set message
            if (error.code == Titanium.Media.NO_CAMERA)
            {
                a.setMessage('Please run this test on device');
            }
            else
            {
                a.setMessage('Unexpected error: ' + error.code);
            }

            // show alert
            a.show();
        },
        saveToPhotoGallery:true,
        allowEditing:true,
        mediaTypes:[Ti.Media.MEDIA_TYPE_PHOTO]
    });
}

function cam_basic(_args) {
    win = Titanium.UI.createWindow({
        title:_args.title
    });
    if (Ti.Platform.osname === 'android'|| Ti.Platform.osname == "iphone" || Ti.Platform.osname == 'ipad') {
        win.addEventListener('focus', fireUpTheCamera);
    } else {
        fireUpTheCamera();  
    }
    return win;
};

module.exports = cam_basic;

当我完成捕获图片并按下OK按钮时,它总是重启应用程序,没有任何错误消息,也在日志中。

我正在使用SDK 6.0.0GA。

请给我一些帮助,以及我的代码有什么问题。

2 个答案:

答案 0 :(得分:1)

在启动相机之前,您必须向最终用户询问权限。我正在使用此代码段,它适用于Ti-5.4.0。

if(Ti.Media.hasCameraPermissions())
    fireUpTheCamera();
else
{
    Ti.Media.requestCameraPermissions(function(permission)
    {
        if(permission.success)
            fireUpTheCamera();
        else
            alert('Please Provide permission first');
    });
}

答案 1 :(得分:0)

自Titanium sdk 5.1起,您还需要请求运行时权限才能使用相机。

见这里:http://docs.appcelerator.com/platform/latest/#!/api/Titanium.Media-method-requestCameraPermissions