【问题标题】:How to fetch music files into app on Android 10 and below in flutter如何在颤动中将音乐文件提取到 Android 10 及更低版本的应用程序中
【发布时间】:2021-08-22 10:28:09
【问题描述】:

我创建了一个flutter音乐应用,它可以从手机存储中提取音乐文件到应用程序中。它在Android 11上完美运行,但在Android 10中无法提取音乐文件及以下。我已经尝试了很多东西,但仍然没有奏效。这是获取音乐文件的代码

    import 'dart:io';

import 'package:flutter/cupertino.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:app_settings/app_settings.dart';

class DirectoryLogic{

  List <String> musicFiles = [];

  fetchData(Function function,BuildContext context)async{


    await Permission.storage.request();

    if(await Permission.storage.isGranted){
      print('granted');

      final Directory dir =  Directory((await getExternalStorageDirectory()).path.toString().substring(0,20));

      dir.list(recursive: true).listen((FileSystemEntity entity) {
        if(entity.path.contains('mp3') ){
          musicFiles.add(entity.path);
        }

      },onDone: function,);

    }

    else{
      await AppSettings.openAppSettings();
  }
  }

//  final Directory extDir = await getExternalStorageDirectory();
//final String dirpath = extDir.path.toString().substring(0,20);
//  print(dirpath);



}

【问题讨论】:

    标签: flutter fetch android-music-player


    【解决方案1】:

    这可能是由于 Android 10 和 11 中引入的 Scoped Storage Access。

    阅读https://developer.android.com/about/versions/11/privacy/storage

    https://developer.android.com/about/versions/10/privacy/changes

    我已经通过启用旧版存储访问 (Example) 解决了这个问题,但我认为我们不能再长时间使用它,因为谷歌正在限制它。但就目前而言,这很好用。

    如示例所示,在 AndroidManifest.xml 文件中使用android:requestLegacyExternalStorage="true"

    【讨论】:

    • 当我尝试添加 android:requestLegacyExternalStorage 属性时,它显示“属性 requestLegacyExternalStorage 仅用于 API 级别 29 及更高级别”
    • 如果编译运行正常就忽略它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    相关资源
    最近更新 更多