如何在颤动中将音乐文件提取到 Android 10 及更低版本的应用程序中
Posted
技术标签:
【中文标题】如何在颤动中将音乐文件提取到 Android 10 及更低版本的应用程序中【英文标题】:How to fetch music files into app on Android 10 and below in flutter 【发布时间】: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);
【问题讨论】:
【参考方案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 及更高级别” 如果编译运行正常就忽略它。以上是关于如何在颤动中将音乐文件提取到 Android 10 及更低版本的应用程序中的主要内容,如果未能解决你的问题,请参考以下文章