on_audio_query

on_audio_query 是一个 Flutter 插件,用于从设备存储查询音频/歌曲信息 [标题、艺术家、专辑等]。

帮助

遇到任何问题? Issues

有任何建议? Pull request

扩展

  • on_audio_room - 用于存储音频[收藏、最常播放等]。

Gif 示例

歌曲 专辑 播放列表 艺术家

平台

方法 Android iOS Web
querySongs ✔️ ✔️ ✔️
queryAlbums ✔️ ✔️ ✔️
queryArtists ✔️ ✔️ ✔️
queryPlaylists ✔️ ✔️
queryGenres ✔️ ✔️ ✔️
queryAudiosFrom ✔️ ✔️ ✔️
queryWithFilters ✔️ ✔️ ✔️
queryArtwork ✔️ ✔️ ✔️
createPlaylist ✔️ ✔️
removePlaylist ✔️
addToPlaylist ✔️ ✔️
removeFromPlaylist ✔️
renamePlaylist ✔️
moveItemTo ✔️
permissionsRequest ✔️ ✔️
permissionsStatus ✔️ ✔️
queryDeviceInfo ✔️ ✔️ ✔️

✔️ -> 支持

❌ -> 不支持

查看所有平台方法支持情况

如何安装

将以下代码添加到您的 pubspec.yaml

dependencies:
  on_audio_query: ^2.1.0

请求权限

Android

要使用此插件,请将以下代码添加到您的 AndroidManifest.xml

<manifest> ...

  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

</manifest>

iOS

要使用此插件,请将以下代码添加到您的 Info.plist

	<key>NSAppleMusicUsageDescription</key>
	<string>..Add a reason..</string>

部分功能

  • 可选和内置存储 读取写入 权限请求
  • 获取所有音频/歌曲。
  • 获取所有专辑和特定专辑的音频。
  • 获取所有艺术家和特定艺术家的音频。
  • 获取所有播放列表和特定播放列表的音频。
  • 获取所有流派和特定流派的音频。
  • 使用特定 [搜索] 获取所有查询方法。
  • 创建/删除/重命名播放列表。
  • 向播放列表添加/删除/移动特定音频。
  • 所有查询方法都有特定的排序类型。

待办事项

  • 为所有插件提供更好的性能。
  • 添加对 Web/Windows/MacOs/Linux 的支持。
  • 移除歌曲的选项。
  • 修复错误。

如何使用

OnAudioQuery() // The main method to start using the plugin.

此插件的所有类型方法

查询方法

方法 参数 返回
querySongs (SortType, OrderType, UriType, RequestPermission) List<SongModel>
queryAlbums (SortType, OrderType, UriType, RequestPermission) List<AlbumModel>
queryArtists (SortType, OrderType, UriType, RequestPermission) List<ArtistModel>
queryPlaylists (SortType, OrderType, UriType, RequestPermission) List<PlaylistModel>
queryGenres (SortType, OrderType, UriType, RequestPermission) List<GenreModel>
queryAudiosFrom (Type, Where, RequestPermission) List<SongModel>
queryWithFilters (ArgsVal, WithFiltersType, Args, RequestPermission) List<dynamic>
queryArtwork (Id, Type, Format, Size, RequestPermission) Uint8List?

播放列表方法

方法 参数 返回
createPlaylist (PlaylistName, RequestPermission) 布尔值
removePlaylist (PlaylistId, RequestPermission) 布尔值
addToPlaylist [NT-BG](PlaylistId, AudioId, RequestPermission) 布尔值
removeFromPlaylist [NT](PlaylistId, AudioId, RequestPermission) 布尔值
renamePlaylist (PlaylistId, NewName, RequestPermission) 布尔值
moveItemTo [NT](PlaylistId, From, To, RequestPermission) 布尔值

权限/设备方法

方法 参数 返回
permissionsRequest (retryRequest) 布尔值
permissionsStatus 布尔值
queryDeviceInfo DeviceModel

Artwork Widget

现在 [QueryArtworkWidget] 支持所有 Android 版本。

  Widget someOtherName() async {
    return QueryArtworkWidget(
      id: SongId, 
      type: ArtworkType.AUDIO,
    );
  }

更多信息: QueryArtworkWidget

缩略语

[NT] -> 需要测试

[BG] -> Android 10/Q 上的错误

示例

querySongs

  someName() async {
    // DEFAULT: 
    // SongSortType.TITLE, 
    // OrderType.ASC_OR_SMALLER,
    // UriType.EXTERNAL, 
    List<SongModel> something = await OnAudioQuery().querySongs();
  }

queryAlbums

  someName() async {
    // DEFAULT: 
    // AlbumSortType.ALBUM, 
    // OrderType.ASC_OR_SMALLER 
    List<AlbumModel> something = await OnAudioQuery().queryAlbums();
  }

queryArtists

  someName() async {
    // DEFAULT: 
    // ArtistSortType.ARTIST, 
    // OrderType.ASC_OR_SMALLER 
    List<ArtistModel> something = await OnAudioQuery().queryArtists();
  }

queryPlaylists

  someName() async {
    // DEFAULT: 
    // PlaylistSortType.NAME, 
    // OrderType.ASC_OR_SMALLER 
    List<PlaylistModel> something = await OnAudioQuery().queryPlaylists();
  }

queryGenres

  someName() async {
    // DEFAULT: 
    // GenreSortType.NAME, 
    // OrderType.ASC_OR_SMALLER 
    List<GenreModel> something = await OnAudioQuery().queryGenres();
  }

queryArtwork

注意:仅在 Android >= Q/10 上可用

  someName() async {
    // DEFAULT: ArtworkFormat.JPEG, 200 and false
    Uint8List something = await OnAudioQuery().queryArtwork(
        SongId, 
        ArtworkType.AUDIO, 
        ...,
      );
  }

或者您可以使用一个基本的自定义 Widget。
查看示例 QueryArtworkWidget

queryWithFilters

  someName() async {
    // DEFAULT: Args.TITLE and false
    // ArgsTypes: AudiosArgs, AlbumsArgs, PlaylistsArgs, ArtistsArgs, GenresArgs
    List<dynamic> something = await OnAudioQuery().queryWithFilters(
        "Sam Smith", 
        WithFiltersType.ARTISTS,
      );

    // After getting the result from [queryWithFilters], convert this list using:
    List<TypeModel> convertedList = something.toTypeModel();

    // Example:
    List<SongModel> convertedSongs = something.toArtistModel(); 
  }

GitHub

https://github.com/LucasPJS/on_audio_query