You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中播放Google Drive中的音频文件?

在Flutter中播放Google Drive音频文件的实现方法

1. 生成Google Drive音频的可播放链接

Google Drive默认的分享链接无法直接用于音频播放,需要先转换为可访问的流媒体链接:

  • 将目标音频文件设置为公开共享(右键文件→共享→选择“知道链接的任何人可查看”权限)
  • 从原分享链接中提取FILE_ID:比如原链接是https://drive.google.com/file/d/abc123xyz/view,其中abc123xyz就是文件ID
  • 构造播放链接:https://drive.google.com/uc?export=download&id=你的FILE_ID

2. 安装音频播放插件

使用Flutter社区主流的audioplayers插件,在pubspec.yaml中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  audioplayers: ^4.0.1 # 替换为最新稳定版本

执行flutter pub get完成依赖安装。

3. 编写播放逻辑

以下是实现基础播放、暂停、停止功能的示例代码:

import 'package:flutter/material.dart';
import 'package:audioplayers/audioplayers.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Drive音频播放')),
        body: const AudioPlayerWidget(),
      ),
    );
  }
}

class AudioPlayerWidget extends StatefulWidget {
  const AudioPlayerWidget({super.key});

  @override
  State<AudioPlayerWidget> createState() => _AudioPlayerWidgetState();
}

class _AudioPlayerWidgetState extends State<AudioPlayerWidget> {
  final AudioPlayer _audioPlayer = AudioPlayer();
  bool _isPlaying = false;
  // 替换为你构造好的Google Drive音频链接
  final String _audioUrl = 'https://drive.google.com/uc?export=download&id=你的FILE_ID';

  Future<void> _togglePlay() async {
    if (_isPlaying) {
      await _audioPlayer.pause();
    } else {
      await _audioPlayer.play(UrlSource(_audioUrl));
    }
    setState(() {
      _isPlaying = !_isPlaying;
    });
  }

  Future<void> _stop() async {
    await _audioPlayer.stop();
    setState(() {
      _isPlaying = false;
    });
  }

  @override
  void dispose() {
    _audioPlayer.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          ElevatedButton(
            onPressed: _togglePlay,
            child: Text(_isPlaying ? '暂停' : '播放'),
          ),
          const SizedBox(height: 16),
          ElevatedButton(
            onPressed: _stop,
            child: const Text('停止'),
          ),
        ],
      ),
    );
  }
}

4. 权限配置

  • Android:在android/app/src/main/AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
  • iOS:Google Drive链接为HTTPS协议,无需额外配置ATS(App Transport Security)规则;若使用HTTP链接,需在Info.plist中添加ATS例外。

私有音频文件的处理思路

若不想公开音频文件,需通过Google Drive API实现授权访问:

  1. 集成Google Sign-In插件完成用户登录
  2. 调用Drive API获取带授权Token的临时文件访问链接
  3. 将带Token的链接传入音频播放器

该方式需处理OAuth2授权流程,适合需要用户访问个人Drive文件的场景。

内容的提问来源于stack exchange,提问作者Mohammad Hanif Shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:08:37