media.capturePhoto()

类型 函数
media.*
返回值
修订版 发行版 2024.3703
关键字 media、相机、照片
另请参阅 media.hasSource()

概述

打开一个设备相机特有的平台接口。此函数是异步的,意味着它立即返回,因此调用代码将继续执行直到其范围结束;之后,应用程序将暂停,直至会话完成。默认情况下,图片对象被添加到当前舞台的顶部,尽管可以选择将图片另存为目录。

要点

常规

此 API 并不支持 Windows 桌面版或 tvOS。

安卓

在 Android 中,要使用摄像头,你必须在 build.settings 文件中设置下列权限。即使你的应用不会将拍摄的图片写入到文件中,外部存储权限也是必需的,因为 Android 的相机应用需要权限将其拍摄的图片保存到公共存储空间中,以供你的应用使用。

settings =
{
    android =
    {
        usesPermissions =
        {
            "android.permission.CAMERA",
            "android.permission.WRITE_EXTERNAL_STORAGE",
        },
    },
}

iOS

在 iOS 中,要使用摄像头,你必须在 build.settingsplist 表中包含下列键/描述。当系统提示用户允许访问时,相关描述会作为警报的一部分显示。请注意,这些描述可以按你的喜好进行自定义,甚至可以本地化(指南)。

settings =
{
    iphone =
    {
        plist =
        {
            NSCameraUsageDescription = "This app would like to access the camera.",
            NSPhotoLibraryUsageDescription = "This app would like to access the photo library.",
        },
    },
}

语法

media.capturePhoto( { listener [, destination] } )
listener (必需)

侦听器. 可为函数侦听器或表侦听器。如果是表,它必须有一个完成方法。分发给侦听器的事件将是一个完成事件,其中包含下列附加属性

  • event.target 是基于 mediaSource 参数的 显示对象。如果选定的图片被保存到文件中,则不会将显示对象添加到舞台中,且该值将为 nil
  • 如果用户选择了一张照片,则 event.completed 将为 true;如果用户取消了拍照或照片选择,则为 false
destination (可选)

. 如果已提供,则选定的图片将保存到文件中。在这种情况下,不会将 显示对象 添加到舞台中,也不会将事件发送给侦听器。此表应采用以下形式{ [baseDir= ,] filename= }. 如果指定了 baseDir,则此目录 常量 将作为保存文件的目录。

示例

local function onComplete( event )
   local photo = event.target
   print( "photo w,h = " .. photo.width .. "," .. photo.height )
end

if media.hasSource( media.Camera ) then
    media.capturePhoto( { listener=onComplete } )
else
    native.showAlert( "Corona", "This device does not have a camera.", { "OK" } )
end