• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import image from '@ohos.multimedia.image'
17import mediaLibrary from '@ohos.multimedia.mediaLibrary'
18import Logger from '../../utils/Logger'
19
20/**
21 * 主要封装了mediaLibrary库相关的接口
22 */
23class MediaLibraryManager {
24  requestPermission(context): void {
25    let permissions = [
26      'ohos.permission.READ_MEDIA',
27      'ohos.permission.WRITE_MEDIA'
28    ]
29    context.requestPermissionsFromUser(permissions, (code, result) => {
30      Logger.debug('permissionRequest ' + JSON.stringify(code) + ' Result: ' + JSON.stringify(result))
31    })
32  }
33
34  async getPixelMapByFileAsset(fileAsset: mediaLibrary.FileAsset): Promise<image.PixelMap> {
35    if (fileAsset == undefined) {
36      Logger.error('fileAsset undefined')
37      // 异常情况下统一返回undefined,不建议使用null
38      return undefined
39    }
40    Logger.debug('begin getPixelMapByFileAsset:' + fileAsset.displayName)
41    let fd: number = undefined
42    let pixelMap = undefined
43    try {
44      fd = await fileAsset.open('rw')
45      Logger.debug('getPixelMapByFileAsset fd: ' + fd)
46      let imageSource = image.createImageSource(fd)
47      Logger.debug('imageSource: ' + JSON.stringify(imageSource))
48      pixelMap = await imageSource.createPixelMap()
49      Logger.debug('pixel size: ' + pixelMap.getPixelBytesNumber())
50      fileAsset.close(fd)
51    } catch (err) {
52      Logger.debug('err: ' + JSON.stringify(err))
53    }
54    return pixelMap
55  }
56
57  getMediaLibrary(context): mediaLibrary.MediaLibrary {
58    return mediaLibrary.getMediaLibrary(context)
59  }
60
61  async getFileAssets(context, fileType: mediaLibrary.MediaType): Promise<mediaLibrary.FetchFileResult> {
62    Logger.debug('begin getFileAssets, fileType:' + fileType)
63    let fileKeyObj = mediaLibrary.FileKey
64    let imagesFetchOption = {
65      selections: fileKeyObj.MEDIA_TYPE + '= ?',
66      selectionArgs: [fileType.toString()],
67    }
68    let fetchFileResult: mediaLibrary.FetchFileResult = undefined
69    try {
70      fetchFileResult = await this.getMediaLibrary(context).getFileAssets(imagesFetchOption)
71      Logger.debug('fetchFileResult count:' + fetchFileResult.getCount())
72    } catch (error) {
73      Logger.error('fetchFileResult Error: ' + JSON.stringify(error))
74    }
75    return fetchFileResult
76  }
77
78  async getFileAssetsByName(context, name: string): Promise<mediaLibrary.FileAsset> {
79    Logger.debug('begin getFileAssetsByName: ' + name)
80    let fileKeyObj = mediaLibrary.FileKey
81    let imagesFetchOption = {
82      selections: fileKeyObj.DISPLAY_NAME + '= ?',
83      selectionArgs: [name.toString()],
84    }
85    let fetchFileResult: mediaLibrary.FetchFileResult = undefined
86    let file: mediaLibrary.FileAsset = undefined
87    try {
88      fetchFileResult = await this.getMediaLibrary(context).getFileAssets(imagesFetchOption)
89      Logger.debug('fetchFileResult count:' + fetchFileResult.getCount())
90      file = await fetchFileResult.getFirstObject()
91    } catch (error) {
92      Logger.error('fetchFileResult Error: ' + JSON.stringify(error))
93    }
94    return file
95  }
96
97  async getThumbnail(fileAsset: mediaLibrary.FileAsset): Promise<image.PixelMap> {
98    let thumbnail = undefined
99    try {
100      thumbnail = await fileAsset.getThumbnail()
101      Logger.debug('PixelMap size: ' + thumbnail.getPixelBytesNumber())
102    } catch (error) {
103      Logger.error('getThumbnail Error: ' + JSON.stringify(error))
104    }
105    return thumbnail
106  }
107
108  async createFileAsset(context, mediaType: mediaLibrary.MediaType,
109                        dir: mediaLibrary.DirectoryType, fileName: string): Promise<mediaLibrary.FileAsset> {
110    Logger.debug('createFileAsset: ' + fileName)
111    let media = this.getMediaLibrary(context)
112    let path = await media.getPublicDirectory(dir)
113    return await media.createAsset(mediaType, fileName, path)
114  }
115
116  async deleteFileAsset(context, fileAsset: mediaLibrary.FileAsset) {
117    Logger.debug(`deleteFileAsset: ${fileAsset.displayName}, uri: ${fileAsset.uri}`)
118    let media = this.getMediaLibrary(context)
119    await media.deleteAsset(fileAsset.uri)
120  }
121}
122
123export default new MediaLibraryManager()