正在尝试将音频资产设置为Android上的铃声



我正在使用以下包将音频资产设置为铃声铃声设置

这是我在调用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/

这是当用户点击Set as Ringtone 时调用的函数

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 Emulator上运行,但我目前正在实际设备上进行测试。LG Phoenix 4

它说URI中有一个错误,您需要修复它(URI为null(。

可能的解决方案:

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

  2. 如果它在模拟器上工作,但在手机上不工作,请检查两者的操作系统版本。

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

使用此pull请求,错误已修复。最后一次提交有一些错误。

最新更新