Flutter铃声管理插件flutter_ringtone_manager的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter铃声管理插件flutter_ringtone_manager的使用

flutter_ringtone_manager 是一个用于在 Flutter 应用中播放系统默认铃声和自定义音频文件的插件。该插件支持 Android 和 iOS 平台,允许开发者轻松访问和播放设备上的各种声音效果。

关键特性

  • 播放自定义资源文件中的音频。
  • 播放系统的铃声、闹钟和通知音效。
  • 在 iOS 上通过 ID 播放系统短促音效。

快速开始

自定义资源音频

要播放位于 assets 文件夹下的自定义音频文件,请确保在 pubspec.yaml 中正确配置了资源路径:

flutter:
  assets:
    - assets/audio/test.mp3

然后可以使用如下代码播放音频:

FlutterRingtoneManager().playAudioAsset("audio/test.mp3");

默认警报音效

你可以直接调用以下方法来播放系统默认的声音:

FlutterRingtoneManager().playRingtone();
FlutterRingtoneManager().playAlarm();
FlutterRingtoneManager().playNotification();

iOS 系统声音 ID

在 iOS 上,可以通过指定系统声音 ID 来播放特定的系统音效:

FlutterRingtoneManager().playIosSystemSoundByID(SystemSoundID.mailSent);

系统声音 IDs 列表

Enum Value Sound ID
SystemSoundID.newMail 1000
SystemSoundID.mailSent 1001

更多详细信息请参见官方文档或源码注释。

示例 Demo

以下是完整的示例程序,展示了如何在应用中集成和使用 flutter_ringtone_manager 插件:

import 'dart:async';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_ringtone_manager/flutter_ringtone_manager.dart';
import 'package:flutter_ringtone_manager/ios_system_sounds.dart';

void main() {
  runApp(const MyApp());
}

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _flutterRingtoneManager = FlutterRingtoneManager();

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  Future<void> initPlatformState() async {
    if (!mounted) return;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: SizedBox(
          width: double.infinity,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              OutlinedButton(
                onPressed: () {
                  _flutterRingtoneManager.playRingtone();
                },
                child: const Text("Play Ringtone"),
              ),
              OutlinedButton(
                onPressed: () => {_flutterRingtoneManager.playAlarm()},
                child: const Text('Play Alarm'),
              ),
              OutlinedButton(
                onPressed: () {
                  _flutterRingtoneManager.playNotification();
                },
                child: const Text("Play Notification"),
              ),
              ElevatedButton(
                onPressed: () {
                  _flutterRingtoneManager.playAudioAsset("audio/test.mp3");
                },
                child: const Text("Play custom Asset"),
              ),
              if (Platform.isIOS)
                OutlinedButton(
                  onPressed: () {
                    _flutterRingtoneManager.playIosSystemSoundByID(SystemSoundID.mailSent);
                  },
                  child: const Text("Play iOS Notification"),
                ),
              ElevatedButton(
                onPressed: () => _flutterRingtoneManager.stop(),
                style: ButtonStyle(
                  foregroundColor: MaterialStateProperty.all(Colors.white),
                  backgroundColor: MaterialStateProperty.all<Color>(Colors.red),
                ),
                child: const Text("Stop"),
              )
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter铃声管理插件flutter_ringtone_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter铃声管理插件flutter_ringtone_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_ringtone_manager插件的示例代码。这个插件允许你管理设备的铃声,包括设置默认铃声、查询铃声列表等。

首先,确保你已经在pubspec.yaml文件中添加了flutter_ringtone_manager依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_ringtone_manager: ^x.y.z  # 替换为最新版本号

然后运行flutter pub get来安装依赖。

示例代码

以下是一个完整的示例,展示如何使用flutter_ringtone_manager插件:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<Ringtone> _ringtones = [];

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

  Future<void> _loadRingtones() async {
    try {
      List<Ringtone> ringtones = await FlutterRingtoneManager.getRingtones();
      setState(() {
        _ringtones = ringtones;
      });
    } catch (e) {
      print("Error loading ringtones: $e");
    }
  }

  Future<void> _setDefaultRingtone(Ringtone ringtone) async {
    try {
      bool isSuccess = await FlutterRingtoneManager.setDefaultRingtone(ringtone.path);
      if (isSuccess) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Default ringtone set successfully!')),
        );
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Failed to set default ringtone')),
        );
      }
    } catch (e) {
      print("Error setting default ringtone: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Ringtone Manager Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: _ringtones.isEmpty
              ? Center(child: CircularProgressIndicator())
              : ListView.builder(
                  itemCount: _ringtones.length,
                  itemBuilder: (context, index) {
                    Ringtone ringtone = _ringtones[index];
                    return ListTile(
                      title: Text(ringtone.title),
                      subtitle: Text(ringtone.artist),
                      trailing: IconButton(
                        icon: Icon(Icons.set_as_phone_ringtone),
                        onPressed: () => _setDefaultRingtone(ringtone),
                      ),
                    );
                  },
                ),
        ),
      ),
    );
  }
}

解释

  1. 依赖安装:在pubspec.yaml中添加flutter_ringtone_manager依赖。
  2. 状态管理:使用StatefulWidget_MyAppState来管理应用的状态。
  3. 加载铃声:在initState方法中调用_loadRingtones函数,该函数使用FlutterRingtoneManager.getRingtones()来获取设备上的所有铃声。
  4. 设置默认铃声_setDefaultRingtone函数接受一个Ringtone对象,并使用FlutterRingtoneManager.setDefaultRingtone方法将其设置为默认铃声。
  5. UI展示:使用ListView.builder来展示铃声列表,每个铃声项都包含标题、艺术家和一个按钮,点击按钮可以设置该铃声为默认铃声。

请确保在Android和iOS项目中配置必要的权限。对于Android,你需要在AndroidManifest.xml中添加以下权限:

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

对于iOS,你可能需要在Info.plist中添加适当的权限描述。

以上代码提供了一个基本的示例,展示了如何使用flutter_ringtone_manager插件来管理和设置设备的铃声。根据你的需求,你可以进一步扩展和定制这个示例。

回到顶部