android - 尝试将音频 Assets 设置为 Android 上的铃声

标签 android flutter dart flutter-dependencies

我正在使用以下包将音频 Assets 设置为铃声
ringtone_set
这是我在调用 setRingtone 方法时一直遇到的错误。

W/System.err(15204): java.lang.NullPointerException: uri
W/System.err(15204):    at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:128)
W/System.err(15204):    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1229)
W/System.err(15204):    at android.content.ContentResolver.openOutputStream(ContentResolver.java:1009)
W/System.err(15204):    at android.content.ContentResolver.openOutputStream(ContentResolver.java:985)
W/System.err(15204):    at acr.rt.ringtone_set.RingtoneSetPlugin.setThings(RingtoneSetPlugin.java:109)
W/System.err(15204):    at acr.rt.ringtone_set.RingtoneSetPlugin.onMethodCall(RingtoneSetPlugin.java:151)
W/System.err(15204):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
W/System.err(15204):    at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
W/System.err(15204):    at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
W/System.err(15204):    at android.os.MessageQueue.nativePollOnce(Native Method)
W/System.err(15204):    at android.os.MessageQueue.next(MessageQueue.java:325)
W/System.err(15204):    at android.os.Looper.loop(Looper.java:151)
W/System.err(15204):    at android.app.ActivityThread.main(ActivityThread.java:6724)
W/System.err(15204):    at java.lang.reflect.Method.invoke(Native Method)
W/System.err(15204):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
W/System.err(15204):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
我正在使用另一个包来请求访问用户存储的权限。
如果库找不到 Assets ,那么它将向控制台记录一条消息。我也可以很好地播放声音,就在我尝试设置铃声的时候。
这是 AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.anisoundboard2">
    <uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
这是我在 pubspec.yaml 中加载 Assets 的方式
flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  assets:
    - assets/images/
    - assets/sounds/
这是用户单击设置为铃声时调用的函数
  Future setRingtone(String soundFileName) async {
    try {
      await requestStoragePermission();
      await RingtoneSet.setRingtone('assets/sounds/$soundFileName');
    } catch(e) {
      print(e);
    }
  }
这是我用来请求权限的功能
  Future requestStoragePermission() async {
    final status = await Permission.storage.request();
    print(status);
  }
这适用于我的 Android 模拟器,但我目前正在实际设备上进行测试。 LG凤凰4

最佳答案

它说 URI 中存在错误,您需要修复它(URI 为空)。
可能的解决方案:

  • 检查 URI 和声音文件名。
  • 如果它在模拟器上运行但在手机上运行,​​请检查它们的操作系统版本。
  • 您可能会在一个 AndroidManifest.xml 中获得权限文件。将其应用于 AndroidManifest.xml debug 中的文件和 release文件夹。
  • 关于android - 尝试将音频 Assets 设置为 Android 上的铃声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64905890/

    相关文章:

    java - 在 API 9 以下使用 Arrays.copyOfRange()

    flutter - 在 flutter 安装中运行 Pub Upgrade 花费太多时间

    firebase - Dart中的Google Firebase和API:生成访问 token 和自定义访问 token

    android - 自动完成 TextView getSelectedItemPosition

    android - Gson toJson 将 "\n"添加到我的属性(property)的末尾

    Flutter Web 监听通过 iFrame 发布的事件

    Flutter:Autoroute:RouteGuard 在 AutoTabsScaffold 中不工作

    Flutter-有没有办法设置所有 AppBars 高度

    android - built_value 与 flutter_test 存在依赖冲突

    android - RecyclerView、StaggeredGridLayoutManager刷新Bug