chrome.mediaGalleries
描述: |
使用 chrome.mediaGalleries API
(在用户允许的前提下)访问用户本地磁盘中的媒体文件(音频、图片、视频)。
|
可用版本: |
从 Chrome 23 开始支持。
|
权限: |
{"mediaGalleries": ["accessType1", "accessType2", ...]}
{"mediaGalleries": ["accessType1", "accessType2", ..., "allAutoDetected"]} 有关更多信息,请参见下面的清单文件部分。 |
了解更多: |
Chrome 浏览器办公时间:媒体库 API
|
用法
媒体库 API 让您提示用户,请求访问用户计算机上媒体库的权限。权限对话框包含当前平台上常用的媒体位置,并允许用户指定其他位置。在这些位置中,只有媒体文件才会在文件系统对象中出现。
清单文件
媒体库 API 有两种权限参数:
- 可以访问的位置
- 访问类型
这两种类型以及每一种类型的权限参数如下表所述:
类型 | 参数 | 效果 |
---|---|---|
位置 | 无 | 如果您不指定位置权限参数,只有在运行时用户使用媒体库权限对话框授予访问指定媒体库的权限后,才能访问媒体库。 |
"allAutoDetected" | 授予您的应用访问用户计算机上所有自动检测到的媒体库的权限,该权限使得应用安装时显示提示,表示应用可以访问用户的媒体文件。 | |
访问类型 | "read" | 授予您的应用读取媒体库文件的权限。 |
"delete" | 授予您的应用从媒体库删除文件的权限,"read" 权限是 "delete" 的前提条件,同时指定 "read" 与 "delete" 获得这两种访问媒体库的权限。 | |
"copyTo" | 授予您的应用向媒体库复制文件的权限,只允许 Chrome 浏览器能够播放或显示的有效媒体文件,复制 Chrome 浏览器无法验证的文件将导致安全错误。"read" 与 "delete" 权限是 "copyTo" 的前提条件,同时指定 "read"、"delete" 和 "copyTo" 获得媒体库的所有访问权限。 |
注意:
- 媒体库权限对话框可以以编程方式触发。用户可能还有其他媒体位置,所以即使您指定了 "allAutoDetected" 权限,您也应当在您的应用中提供某种方式打开权限对话框。
- 由于文件验证的要求,没有对媒体库的写入权限。然而,您可以将文件写入另一个文件系统,如临时文件系统,然后将这些文件复制到期望的媒体库中。
- 访问类型权限本身不会触发安装时的提示,但是访问类型会在媒体库权限对话框和安装时的提示(如果请求了 "allAutoDetected" 权限)中反映出来
如下是指定媒体库权限的清单文件的例子:
{ "name": "我的应用", ... "permissions": [ { "mediaGalleries": ["read", "allAutoDetected"] } ], ... }
这一清单文件的例子在安装时会触发权限提示,让应用读取用户计算机上所有自动检测到的媒体库。用户可以使用媒体库权限对话框添加或删除库,之后应用就能够读取用户选择的库中的所有媒体文件。
iTunes
如果存在,用户的 iTunes 库可以作为媒体库访问。除了库中的媒体文件,“iTunes Music Library.xml”文件也会存在。
无论音乐文件在磁盘上的什么位置(以及 XML 文件中包含的位置),默认情况下它们都会被映射至艺术家/唱片集/音轨这样的结构。这种映射方式有时候并不完美,所以如果应用需要将 XML 文件与媒体库中的文件配对的话,需要注意两点。
如果唱片集中的音轨文件名不唯一,在扩展名之前会加上包含括号的音轨号,使它们唯一。如果艺术家、唱片集或音轨名称中包含冒号或斜杠,它们会变成下划线。
Picasa
如果存在的话,用户的 Picasa 库也可以作为媒体库访问。Picasa 扫描的文件系统目录呈现在 folders/ 中,Picasa 相册呈现在 albums/ 中。
如果相册和文件夹具有相同的名称与日期,在扩展名前会加上包含括号的增量整数,使它们唯一。
同一相册中如果有相同的文件名,也会在扩展名前加上包含括号的增量整数使之唯一。
iPhoto
如果存在的话,用户的 iPhoto 库也可以作为媒体库访问。这些文件存放在名为“Albums/”的子目录中。在这一子目录中,用户 iPhoto 库中的每一个相册都按照各自的名称以子目录形式呈现,并且包含相册中的照片对应的文件项。
如果相册名重复或相册中图片文件名重复,在文件名后就会附加不重复的后缀,如“(NN)”,其中 NN 是唯一的数值。
在 iPhoto 的多个相册中出现的项目也会在媒体库中对应相册中出现。
如果用户修改了相册中的图片,相册目录中就会有另外一个名为“originals/”的子目录,它包含原始的图片,与上级相册目录中的文件名相同,而出现在上级相册目录中的文件则是用户进行裁剪、旋转等编辑操作之后的图片。
摘要
方法 | |
---|---|
getMediaFileSystems −
chrome.mediaGalleries.getMediaFileSystems(object details, function callback)
| |
addUserSelectedFolder −
chrome.mediaGalleries.addUserSelectedFolder(function callback)
| |
dropPermissionForMediaFileSystem −
chrome.mediaGalleries.dropPermissionForMediaFileSystem(string galleryId, function callback)
| |
startMediaScan −
chrome.mediaGalleries.startMediaScan()
| |
cancelMediaScan −
chrome.mediaGalleries.cancelMediaScan()
| |
addScanResults −
chrome.mediaGalleries.addScanResults(function callback)
| |
getMediaFileSystemMetadata −
object
chrome.mediaGalleries.getMediaFileSystemMetadata(DOMFileSystem mediaFileSystem)
| |
getAllMediaFileSystemMetadata −
chrome.mediaGalleries.getAllMediaFileSystemMetadata(function callback)
| |
getMetadata −
chrome.mediaGalleries.getMetadata(Blob mediaFile, object options, function callback)
| |
事件 | |
onGalleryChanged | |
onScanProgress |
方法
getMediaFileSystems
chrome.mediaGalleries.getMediaFileSystems(object details, function callback)
获取当前用户代理配置下的媒体库。如果没有配置或者没有可用的媒体库,回调函数将会接收空数组。
参数 | |||||
---|---|---|---|---|---|
object | (可选) details |
|
|||
function | callback |
callback 参数应该是一个如下形式的函数: function(array of DOMFileSystem mediaFileSystems) {...};
|
addUserSelectedFolder
chrome.mediaGalleries.addUserSelectedFolder(function callback)
从 Chrome 34 开始支持。
向用户显示选择文件夹对话框,并将选定目录添加为媒体库。如果用户取消对话框,selectedFileSystemName 为空。需要用户操作才能显示对话框,如果没有用户操作,调用回调函数时就像用户取消操作一样。
参数 | ||||||||
---|---|---|---|---|---|---|---|---|
function | callback |
callback 参数应该是一个如下形式的函数: function(array of DOMFileSystem mediaFileSystems, string selectedFileSystemName) {...};
|
dropPermissionForMediaFileSystem
chrome.mediaGalleries.dropPermissionForMediaFileSystem(string galleryId, function callback)
从 Chrome 36 开始支持。
放弃指定媒体库的访问权限。
参数 | ||
---|---|---|
string | galleryId | |
function | (可选) callback |
如果您指定了 callback 参数,它应该是一个如下形式的函数: function() {...};
|
startMediaScan
chrome.mediaGalleries.startMediaScan()
从 Chrome 35 开始支持。
开始扫描用户的硬盘,寻找包含媒体的目录。扫描可能需要很长时间,所以进度和完成情况通过事件的方式通知。扫描完成后不会授予任何权限,而需要调用 addScanResults。
cancelMediaScan
chrome.mediaGalleries.cancelMediaScan()
从 Chrome 35 开始支持。
取消正在进行的媒体扫描,正常情况下应用应该提供某种方式让用户取消他们开始的扫描操作。
addScanResults
chrome.mediaGalleries.addScanResults(function callback)
从 Chrome 35 开始支持。
向用户显示扫描的结果,并让他们将其中的一部分或者全部添加为媒体库。该方法应该在 'finish'(完成)类型的 onScanProgress 事件产生之后调用,调用后返回应用能够访问的所有媒体库,而不仅仅是新增加的媒体库。
参数 | |||||
---|---|---|---|---|---|
function | callback |
callback 参数应该是一个如下形式的函数: function(array of DOMFileSystem mediaFileSystems) {...};
|
getMediaFileSystemMetadata
object
chrome.mediaGalleries.getMediaFileSystemMetadata(DOMFileSystem mediaFileSystem)
从 Chrome 26 开始支持。
获取指定媒体文件系统的元数据。
参数 | ||
---|---|---|
DOMFileSystem | mediaFileSystem |
返回值
string | name |
文件系统的名称。 |
string | galleryId |
媒体库的唯一持久标识符。 |
string | (可选) deviceId |
如果媒体库位于可移动设备上,并且设备在线,则为设备的唯一标识符。 |
boolean | isRemovable |
如果媒体库在可移动设备上则为 true。 |
boolean | isMediaDevice |
如果检测到媒体库所在的设备是媒体设备(即 PTP 或 MTP 设备,或存在 DCIM 目录)则为 true。 |
boolean | isAvailable |
如果设备当前可用则为 true。 |
getAllMediaFileSystemMetadata
chrome.mediaGalleries.getAllMediaFileSystemMetadata(function callback)
从 Chrome 33 开始支持。
获取所有可用媒体库的元数据。
参数 | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
function | callback |
callback 参数应该是一个如下形式的函数: function(array of object metadata) {...};
|
getMetadata
chrome.mediaGalleries.getMetadata(Blob mediaFile, object options, function callback)
从 Chrome 38 开始支持。警告:目前为 Dev 分支。了解更多内容
获取媒体文件特定的元数据,媒体库和其他 DOM 文件系统中的文件都可以使用该方法。
参数 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Blob | mediaFile |
从 Chrome 33 开始支持。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object | (可选) options |
从 Chrome 33 开始支持。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function | callback |
callback 参数应该是一个如下形式的函数: function(object metadata) {...};
|
事件
onGalleryChanged
从 Chrome 38 开始支持。警告:目前为 Dev 分支。了解更多内容
媒体库更改时或取消媒体库监视时产生。
addListener
chrome.mediaGalleries.onGalleryChanged.addListener(function callback)
参数 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
function | callback |
callback 参数应该是一个如下形式的函数: function(object details) {...};
|
onScanProgress
从 Chrome 35 开始支持。
正在进行中的媒体扫描已经更改状态,有关更多信息请参见 details 参数。
addListener
chrome.mediaGalleries.onScanProgress.addListener(function callback)
参数 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
function | callback |
callback 参数应该是一个如下形式的函数: function(object details) {...};
|