android - 如何通过单击相机覆盖上的按钮打开照片库?

标签 android ios camera titanium appcelerator

我正在使用Titanium SDK 3.1.2,并为iOS和Android进行部署。
您可以找到我的叠加HERE的代码。我这样做是因为代码很大,并且希望我的问题清晰明了。
我正在尝试使用以下功能为相机创建自己的叠加层:
拍张照片。
显示摄像机。
打开画廊。
关闭相机。
我可以关闭相机并拍照,但无法打开照片库。我的galleryButton有一个singletap事件,如下所示:

galleryButton.addEventListener("singletap", function(e){
        openKineduPhotoGallery();
        Ti.Media.hideCamera();
    });

但是当我这样做时什么也没有发生,之后我就无法关闭相机或拍照。如果我尝试拍照,则会出现以下错误:
Script Error {
        backtrace = "#0 () at file://localhost/var/mobile/Applications/79D9256C-7782-4323-A371-1AD45B37D037/Full.app/ui/common/GenericWindow.js:1\n#1 () at file://localhost/var/mobile/Applications/79D9256C-7782-4323-A371-1AD45B37D037/Full.app/ui/common/CreateMoment.js:1";
        line = 1;
        message = "'null' is not an object (evaluating 'o.type')";
        name = TypeError;
        sourceId = 81147840;
        sourceURL = "file://localhost/var/mobile/Applications/79D9256C-7782-4323-A371-1AD45B37D037/Full.app/ui/common/GenericWindow.js";
    }

我无法弄清楚是什么对象使null出现。
我尝试交换调用方法的顺序,使其看起来像这样:
galleryButton.addEventListener("singletap", function(e){
        Ti.Media.hideCamera();
        openKineduPhotoGallery();
    });

但这只是隐藏了相机,根本没有显示图库,而且我在iOS中收到以下警告:
Nov  6 18:37:20 Nenvo-iPod Full[3240] <Warning>: *** Assertion failure in -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:], /SourceCache/UIKit/UIKit-2380.17/UIWindowController.m:211
Nov  6 18:37:20 Nenvo-iPod Full[3240] <Warning>: Warning: Attempt to dismiss from view controller <UIImagePickerController: 0x1e5e17a0> while a presentation or dismiss is in progress!

我以为这是hideCamera方法的错误,所以我对此进行了评论,但这只是触发了showCamera方法上的错误函数,并且我得到了这样的JSON错误对象:
{
  "type": "error",
  "code": 1,
  "source": [object MediaModule],
  "success": false
}

我试图对MediaModule进行字符串化,但它只是返回了一个空对象。
甚至有可能从摄影机叠加层打开图库吗?我有什么选择?我正在尝试实现类似于instagram拍照,录制视频并从画廊中选择图片的工作流程。

最佳答案

回答以下问题的方法实际上是当您调用hideCamera并打开PhotoGallery,然后将两者都打开为模态窗口,因此我们需要在摩擦几秒钟后调用openKineduPhotoGallery函数。

galleryButton.addEventListener("singletap", function(e){
        Ti.Media.hideCamera();
        openKineduPhotoGallery();
});

因此,您应该尝试以下代码。
   galleryButton.addEventListener("singletap", function(e){
            Ti.Media.hideCamera();
            setTimeout(function(){
                    openKineduPhotoGallery();                   
            },500);
    });

关于android - 如何通过单击相机覆盖上的按钮打开照片库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19825958/

相关文章:

javascript - 通过 Javascript 检测移动设备

android - 如何通过代码设置layout_span

java - Android Studio 确定 GitHub 的凭据无效

ios - 如何使用 View 数组中具有最高高度的 View 进行约束

java - 拍摄照片并在 Android 的 ImageView 中以全尺寸显示

android - 触摸外部时关闭对话框

ios - 根据条件 Swift 获取模型对象的特定属性数组

ios - 可拖动的 UITextView

c++ - 我如何旋转glm相机

c# - XNA 2D 相机 - 如何将其锁定/居中到动画 Sprite ?