media.selectVideo()

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

概述

打开一个特定于平台的界面,用于访问设备的照片库。此函数是异步的,这意味着它会立即返回,因此调用代码将继续执行直到其作用域结束;之后,应用程序将暂停,直到会话完成。

注意事项

通用

Windows、macOS 或 tvOS 不支持此 API。

iOS

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

语法

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

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

  • `event.url` 是一个 字符串,它是视频的 URL。如果操作被取消,则此值将为 `nil`。
  • 如果用户拍摄了视频,`event.completed` 将为 `true`;如果用户取消了视频选择,则为 `false`。
  • 如果用户选择了视频,`event.duration` 将是视频的秒数;如果用户取消了视频选择或无法获取该值,则为 `nil`。在某些 Android 应用程序/设备组合中,如果缺少 `android.permission.READ_EXTERNAL_STORAGE` 权限,则可能会发生这种情况。
  • 如果用户选择了视频,`event.fileSize` 将是视频的字节数;如果用户取消了视频选择或无法获取该值,则为 `nil`。在某些 Android 应用程序/设备组合中,如果缺少 `android.permission.READ_EXTERNAL_STORAGE` 权限,则可能会发生这种情况。
mediaSource (可选)

常量 可以是以下之一

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

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

permittedArrowDirections (可选)

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

示例

标准
local function onComplete( event )
    if event.completed then
        media.playVideo( event.url )
    end
end

if media.hasSource( media.PhotoLibrary ) then
   media.selectVideo( { listener=onComplete } )
else
   native.showAlert( "Corona", "This device does not have a photo library.", { "OK" } )
end
iPad
-- Video completion listener
local function onVideoComplete( event )
    print( "video session ended" )
end

-- Selection completion listener
local function onComplete( event )
    if event.completed then
        media.playVideo( event.url, media.RemoteSource, true, onVideoComplete )
        print( event.duration )
        print( event.fileSize )
    end
end

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

local function pickVideo( event )
    
    media.selectVideo(
    {
        mediaSource = media.SavedPhotosAlbum,
        listener = onComplete, 
        origin = button.contentBounds, 
        permittedArrowDirections = { "right" } 
    })
end

button:addEventListener( "tap", pickVideo )