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();
}







