【问题标题】:Trying to set an audio asset as a ringtone on Android尝试将音频资产设置为 Android 上的铃声
【发布时间】:2021-03-02 11:27:27
【问题描述】:

我正在使用以下包将音频资产设置为铃声 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)

我正在使用另一个包来请求访问用户存储的权限。 如果库找不到资产,那么它将向控制台记录一条消息。我也可以很好地播放声音,就在我尝试设置铃声时。

这里是 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 中加载资产的方式

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

【问题讨论】:

    标签: android flutter dart flutter-dependencies


    【解决方案1】:

    使用this拉取请求,错误已修复。最后一次提交有一些错误。

    【讨论】:

    • 您应该对此发表评论而不是发布答案。
    • 我确实用过这个,bug没有修复
    【解决方案2】:

    它说URI有错误,你需要修复它(URI为空)。

    可能的解决方案:

    1. 检查 URI 和声音文件名。

    2. 如果它在模拟器上运行但在手机上运行,​​请检查它们的操作系统版本。

    3. 您可能只在一个AndroidManifest.xml 文件中获得权限。将其应用于debugrelease 文件夹中的AndroidManifest.xml 文件。

    【讨论】:

    • 取消这些建议后,我发现它适用于 Android 10.0 及更高版本。所以现在如果版本太低,我只是不渲染设置铃声按钮。感谢您的洞察力
    猜你喜欢
    • 2011-06-03
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多