搜索插件、代码仓与 APP 分类

插件详情v0.1.3

media_store_plus

要在 Flutter 中使用 Android MediaStore API,它通过 Flutter 支持所有 Android 版本的读写操作。

Android
近 30 天下载
2.6万
喜欢数
91
Pub 分数
160

安装插件

flutter pub add media_store_plus

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

media_store_plus 是一个 Flutter 包,提供对 Android MediaStore API 的访问,可在所有 Android 版本上实现对媒体文件的读写操作。它将 Flutter 与原生 Android 功能连接起来,使开发者能够通过系统的媒体存储直接管理音频、视频和图像文件。该包专为与面向 Android 的 Flutter 应用无缝集成而设计,提供可靠的文件处理功能,无需编写平台特定代码。它支持常见的媒体操作,如查询、插入和更新媒体条目。

适合场景

  • 访问设备媒体文件
  • 管理照片和视频
  • 读取和写入媒体元数据
  • 与 Android 媒体库集成
  • 构建媒体画廊应用

主要特点

  • 跨版本 Android 兼容性
  • 对媒体文件的读写支持
  • 原生 Android MediaStore 集成
  • Simple Flutter API
  • 无需平台通道

适合对象

  • 仅限 Android 的媒体管理
  • 媒体画廊应用
  • 从设备存储导入/导出文件
  • 需要直接访问 MediaStore 的应用

使用建议

  • 仅限 Android 平台
  • 需要适当的运行时权限
  • 可能需要处理权限请求
  • 依赖 Android SDK 版本兼容性

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

media_store_plus

To use Android MediaStore API in Flutter. It supports both read & write operations in every Android version through Flutter. It also requests appropriate permissions, if needed.

Motivation

From API level 30, we have to use Scoped Storage to write files. Though, we can read all files by direct path until API level 32, from API level 33 we need to use Scoped Storage for reading also.

We can write in DCIM, Pictures, Movies, Alarms, Audiobooks, Music, Podcasts, Ringtones, and Download folders by MediaStore without any kind of Storage permission. You can also read without any permission from these folders as long as the files are created by the app. But if we uninstall the app, and install it again, then, it will lose the read/write access for the files previously created by the app.

Again, we can read all files by requesting android.permission.READ_EXTERNAL_STORAGE permission until API level 32.From API level 33, it has no usage. Android introduces three specific permissions i.e. android.permission.READ_MEDIA_IMAGES, android.permission.READ_MEDIA_AUDIO & android.permission.READ_MEDIA_VIDEO to read audio, video & images.

But, we can't read other folders from API level 33 without requesting explicit permission for those folders.

Sum up, from Flutter there is no way to write in any folder with/without storage permission other than the app data folder!

Because, we can't use the MediaStore API from Flutter, that is required for writing, other than the app data folder. Again we can't request to read/write any specific folder using a file picker from Flutter.

So, the only solution is to use the platform channel for this. This issue led me to create this media_store_plus plugin.

Usage

You can read, write, edit, and delete in the DCIM, Pictures, Movies, Alarms, Audiobooks, Music, Podcasts, Ringtones, Download with this plugin. You can also request to read or write any specific folder other than those mentioned above, by file picker with this plugin. Again when you try to read, edit, or delete a file that is not created by your app, it will automatically request permission from the user for that task.

You can read the full documentation from here. You can also check the example app for implementation. Reading the plugin's source code also helps you in that case.

Getting Started

First, add media_store_plus as a dependency in your pubspec.yaml file.

dependencies:
  media_store_plus: ^0.1.3

Don't forget to flutter pub get.

Android Side

Edit the AndroidManifest.xml like this.

    <!-- required from API level 33 -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!-- To read images created by other apps -->
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <!-- To read audios created by other apps -->
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!-- To read vidoes created by other apps -->

    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE" <!-- To read all files until API level 32 -->
        android:maxSdkVersion="32" />

    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE" <!-- To write all files until API level 29. We will MediaStore from API level 30 -->
        android:maxSdkVersion="29" />

    <application
        ---------------------------
        android:requestLegacyExternalStorage="true"> 
        <!-- Need for API level 29. Scoped Storage has some issue in Android 10. So, google recommanded to add this. -->
        <!-- Read more from here: https://developer.android.com/training/data-storage/shared/media#access-other-apps-files-->
    </application>

You need to modify the proguard-rules.pro file as per this link. Because this plugin uses GSON internally.

Contribution

You can create issue(s) for any missing feature(s) that is relevant to this plugin. You can also help by pointing out any bugs. Pull requests are also welcomed

Status

This is an active project as MediaStore is the future of accessing files in Android. There's a lot of room to improve this plugin.

Support the package (optional)

If you find this package useful, you can support it by giving it a star.

Credits

This package is developed by Shahriar Nasim Nafi

所属分类

依赖

依赖清单 2 项

  • meta^1.8.0
  • plugin_platform_interface^2.0.2

源码仓库

使用此插件的项目