media.selectPhoto()

类型 函数
media.*
返回值
修订 版本 2024.3703
关键词 媒体,相机,照片
另请参阅 media.hasSource()

概述

打开一个平台特定的界面,用于访问设备的照片库。此函数是异步的,这意味着它会立即返回,因此调用代码将继续执行直到其作用域结束;之后,应用程序将暂停,直到会话完成。默认情况下,图像对象会被添加到当前舞台的顶部,但也可以选择将图像保存到目录中。

注意事项

通用

Windows 桌面不支持此 API。

iOS

  • 在 iOS 上,为了使用相机,您必须在 `build.settings` 的 `plist` 表中包含以下键/描述。当系统提示用户允许访问时,相关的描述将作为警报的一部分显示。请注意,您可以根据自己的喜好自定义这些描述,甚至可以对其进行本地化(指南)。
settings =
{
    iphone =
    {
        plist =
        {
            NSPhotoLibraryUsageDescription = "This app would like to access the photo library.",
        },
    },
}
  • iPad 需要额外的参数 `origin` 和 `permittedArrowDirections` 来指定用于选择照片的弹出窗口的位置和方向。

语法

media.selectPhoto ( { listener [, mediaSource] [, destination] [, origin] [, permittedArrowDirections] } )
listener (必填)

监听器 可以是函数监听器或表监听器。如果是表,它必须有一个 completion 方法。分派给监听器的事件将是一个 completion 事件,并带有以下附加属性

  • `event.target` 是一个基于 `mediaSource` 参数的 显示对象。如果所选图像保存到文件中,则不会向舞台添加显示对象,并且此值将为 `nil`。
  • `event.completed` 如果用户选择了一张照片,则为 `true`;如果用户取消了相机或照片选择,则为 `false`。

    media.selectPhoto( { listener=sessionComplete } )

mediaSource (可选)

常量 可以是以下之一

  • media.PhotoLibrary
  • media.SavedPhotosAlbum
destination (可选)

如果提供,所选图像将保存到文件中。在这种情况下,不会向舞台添加 显示对象。此表应采用以下形式{ [baseDir= ,] filename= }。如果指定了 `baseDir`,则这是保存文件的目录 常量

origin (可选)

仅适用于 iPad。定义对象(通常是按钮)的边界,iPad 的弹出窗口将从此处弹出。一种方便的模式是传递对象的 `contentBounds` 属性。

permittedArrowDirections (可选)

仅适用于 iPad。一个值数组,定义 iPad 弹出窗口箭头可以指向的方向。有效值为 `“up”`、`“down”`、`“left”`、`“right”` 或 `“any”`。默认值为 `“any”`。

示例

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

if media.hasSource( media.PhotoLibrary ) then
   media.selectPhoto( { mediaSource=media.PhotoLibrary, listener=onComplete } )
else
   native.showAlert( "Corona", "This device does not have a photo library.", { "OK" } )
end
iPad
-- Selection completion listener
local function onComplete( event )
    local photo = event.target
   
    if photo then
        print( "photo w,h = " .. photo.width .. "," .. photo.height )
    end
end

local button = display.newRect( 120, 240, 80, 70 )

local function pickPhoto( event )

    media.selectPhoto(
    {
        mediaSource = media.SavedPhotosAlbum,
        listener = onComplete, 
        origin = button.contentBounds, 
        permittedArrowDirections = { "right" },
        destination = { baseDir=system.TemporaryDirectory, filename="image.jpg" } 
    })
end

button:addEventListener( "tap", pickPhoto )