当前位置: 首页 > 知识库问答 >
问题:

我想在Flutter中的音频播放器应用程序中从Android存储设备获取所有MP3文件,并在Listview中显示它们。构建器

汪晟睿
2023-03-14

我正在Flitter中制作一个音乐播放器应用程序,希望显示从设备内部存储器中提取的所有歌曲的列表,但我无法找到正确的代码。

import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:path_provider/path_provider.dart';

class Songlist extends StatefulWidget {

    @override
    _SonglistState createState() => _SonglistState();
}

class _SonglistState extends State<Songlist> {
    @override
    void initState() {
        super.initState();
        initlist();
    }

    void initlist() async {
        if (await Permission.storage.request().isGranted) {
            Directory dir = await getExternalStorageDirectory();
            List<FileSystemEntity> files;
            files = dir.listSync(recursive: true, followLinks: false);
        }
    }

    @override
    Widget build(BuildContext context) {

        return Scaffold(
            appBar: AppBar(
                title: Text("Your Media"),
                backgroundColor: mycolor,
            ),
            /* body: new ListView.builder(
                padding: const EdgeInsets.all(16.0),
                itemCount: files.length,
                itemBuilder: (context, i) {
                    return buildRow(_files.elementAt(i).path);
                }),
            */
            );
    }

}

共有1个答案

况嘉运
2023-03-14

您可以使用flute\u music\u player软件包获取歌曲。

首先将这两个权限添加到清单中:

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

然后得到歌曲:

List<Song> songs = [];

Future<void> getSongs() async {
  songs = await MusicFinder.allSongs();
}

@override
void initState() {
  super.initState();
  getSongs();
}

Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: ListView.builder(
        itemCount: songs.length,
        itemBuilder: (context, index) {
          var song = songs[index];

          return ListTile(
            title: Text(song.title),
            subtitle: Row(
              children: [
                Text(song.artist),
              ],
            ),
          );
        },
      ),
    ),
  );
}
 类似资料:
  • 我正在创建一个MP3播放器应用程序。它大部分工作正常,但有一个边缘情况。 如果用户有一个名为“Bieber.mp3”的文件,但将文件名称更改为“比伯”,而没有文件应用程序中的文件扩展名(在Android系统上),他们仍然可以从文件应用程序中正确播放这首歌,具体取决于在设备上(像运行在Marshmallow上的Nexus这样的旧设备会这样做,而像Android12上的像素这样的新设备会说它是无效的文

  • 我已经在android studio中创建了一个音乐播放器应用程序。当我运行它时,没有问题,应用程序运行良好,但当我尝试从文件管理器播放歌曲时,应用程序选择弹出窗口显示我的应用程序。当我选择音乐播放器时,它会打开音乐播放器,但不会播放歌曲。只显示最后播放的歌曲。如何自动播放所选歌曲?我有什么需要捕捉的意图吗? AndroidManifest。xml 主要活动。JAVA

  • 问题内容: 我尝试快速连接.wav音频文件。 这是我的代码: 并在终端中运行此错误(在iPhone上运行): 文件:///var/mobile/Containers/Data/Application/3F49D360-B363-4600-B3BB- EE0810501910/Documents/resultmerge.wav 成功 失败,错误域= AVFoundationErrorDomain代码

  • 我有listview,它包含一个带有播放按钮和搜索栏的音频文件列表。 当我单击listview的播放按钮时,我想播放一个音频文件。我成功地实现了这一点,但当我单击列表中的另一个播放按钮时,两个音频文件正在连续播放,它将继续所有单击播放按钮。我如何限制媒体播放器在一个位置播放,如果我点击另一个图标,它必须停止旧的媒体播放器,并开始播放新的。有人能说我怎么实现这个吗?。我有相同的按钮播放和暂停。

  • 我正在使用媒体播放器播放带有列表视图的原始文件夹中的音频文件。一切正常,但我有一个问题。 问题是:当第一个音频文件结束时,它播放第二个文件,但当第二个文件结束时,它不播放第三个文件。 问题是什么??我尝试在mp上添加setOnCompletionListener并重置mp并在(位置+1)中播放audion,这是真的吗? 我还有一个问题。当它结束播放listview中的第一个项目并开始播放第二个项目

  • 所以我正在学习关于android的Firebase存储,但我遇到了困难。我想要获得我存储在Firebase存储的文件夹中的所有图像,一旦获得对它们的引用,我想要将它们存储在ListView或RecyclerView中。我该怎么做?我的意思是我可以获得文件夹的引用: