鴻蒙OS 媒體存儲數(shù)據(jù)操作開發(fā)指導(dǎo)

2020-09-18 14:42 更新

場景介紹

媒體存儲是提供了操作媒體圖片、視頻、音頻等元數(shù)據(jù)的Uri 鏈接信息。

接口說明

接口名 描述
appendPendingResource(Uri uri) 更新給定的 Uri,用于處理包含待處理標(biāo)記的媒體項。
appendRequireOriginalResource(Uri uri) 更新給定的 Uri, 用于調(diào)用者獲取原始文件內(nèi)容。
fetchVolumeName(Uri uri) 獲取給定 Uri 所屬的卷名。
fetchExternalVolumeNames(Context context) 獲取所有組成 external 的特定卷名的列表。
fetchMediaResource(Context context, Uri documentUri) 根據(jù)文檔式的 Uri 獲取對應(yīng)的媒體式的Uri。
fetchDocumentResource(Context context, Uri mediaUri) 根據(jù)媒體式的 Uri 獲取對應(yīng)的文檔式的Uri。
fetchVersion(Context context) 獲取卷名為 external_primary 的不透明版本信息。
fetchVersion(Context context, String volumeName) 獲取指定卷名的不透明版本信息。
fetchLoggerResource() 獲取用于查詢媒體掃描狀態(tài)的 Uri。
Audio.convertNameToKey(String name) 將藝術(shù)家或者專輯名稱轉(zhuǎn)換為可用于分組,排序和搜索的“key”。
Audio.Media.fetchResource(String volumeName) 獲取用于處理音頻媒體信息的 Uri。
Audio.Genres.fetchResource(String volumeName) 獲取用于處理音頻流派信息的 Uri。
Audio.Genres.fetchResourceForAudioId(String volumeName, int audioId) 獲取用戶處理音頻文件對應(yīng)的流派信息的 Uri。
Audio.Genres.Members.fetchResource(String volumeName, long genreId) 獲取用于處理音頻流派子目錄的成員信息的 Uri。
Audio.Playlists.fetchResource(String volumeName) 獲取用于處理音頻播放列表信息的 Uri。
Audio.Playlists.Members.fetchResource(String volumeName, long playlistId) 獲取用于處理音頻播放列表子目錄的成員信息的 Uri。
Audio.Playlists.Members.updatePlaylistItem(DataAbilityHelper dataAbilityHelper, long playlistId, int oldLocation, int newLocation) 移動播放列表到新位置。
Audio.Albums.fetchResource(String volumeName) 獲取用于處理音頻專輯信息的 Uri。
Audio.Artists.fetchResource(String volumeName) 獲取用于處理音頻藝術(shù)家信息的 Uri。
Audio.Artists.Albums.fetchResource(String volumeName, long id) 獲取用于處理所有專輯出現(xiàn)藝術(shù)家的歌曲信息的 Uri。
Audio.Downloads.fetchResource(String volumeName) 獲取用于處理下載條目信息的 Uri。
Audio.Files.fetchResource(String volumeName) 獲取用于處理媒體文件及非媒體文件(文本,HTML,PDF等)的 Uri。
Audio.Images.Media.fetchResource(String volumeName) 獲取用于處理圖像媒體信息的 Uri。
Audio.Video.Media.fetchResource(String volumeName) 獲取用于處理視頻媒體信息的 Uri。

開發(fā)步驟

以播放視頻文件為例:

  1. 獲取媒體外部存儲提供的Uri鏈接。

  1. AVStorage.Video.Media.EXTERNAL_DATA_ABILITY_URI

  1. 根據(jù)媒體存儲提供的Uri鏈接操作媒體元數(shù)據(jù)。

  1. DataAbilityHelper helper = getDataAbilityHelper(context);
  2. try {
  3. DataAbilityPredicates predicates = new DataAbilityPredicates();
  4. // 設(shè)置查詢過濾條件
  5. predicates.equalTo(AVStorage.Video.Media.DATA, "xxxxx");
  6. // columns為null,查詢記錄所有字段,當(dāng)前例子表示查詢id字段
  7. ResultSet result = helper.query(AVStorage.Video.Media.EXTERNAL_DATA_ABILITY_URI, new String[]{AVStorage.Video.Media.ID}, predicates);
  8. if (result == null) {
  9. return;
  10. }
  11. while (result.goToNextRow()) {
  12. result.getInt(result.getColumnIndexForName(AVStorage.Video.Media.ID)); // 獲取id字段的值
  13. }
  14. result.close();
  15. } catch (DataAbilityRemoteException e) {
  16. // ...
  17. }

  1. 獲取到媒體 ID 后,即可通過設(shè)置媒體源來進行業(yè)務(wù)操作,如:播放。

  1. Uri uri = Uri.appendEncodedPathToUri?(AVStore.Video.Media.EXTERNAL_DATA_ABILITY_URI, String.valueOf(id)); // id為步驟2獲取到的id
  2. Player player = new Player(context);
  3. DataAbilityHelper helper = getDataAbilityHelper(context);
  4. player.setSource(new Source(helper.openFile(uri, "r")));
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號