Попытка установить аудио-ресурс в качестве мелодии звонка на Android

#android #flutter #dart #flutter-dependencies

#Android #flutter #dart #flutter-зависимости

Вопрос:

Я использую следующий пакет, чтобы установить аудиоресурс в качестве мелодии звонка 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 Phoenix 4

Ответ №1:

В нем говорится, что в URI есть ошибка, и вам нужно ее исправить (URI равно null).

Возможные решения:

  1. Проверьте URI и имя звукового файла.

  2. Если он работает на эмуляторе, но не на телефоне, проверьте версию ОС для них обоих.

  3. Вы можете получить разрешения только в одном AndroidManifest.xml файле. Примените его как AndroidManifest.xml к файлам debug , так и release к папкам.

Комментарии:

1. После отказа от этих рекомендаций я обнаружил, что это работает на Android 10.0 и выше. Так что теперь я просто не отображаю кнопку установить мелодию звонка, если версия слишком низкая. Спасибо за ваше понимание

Ответ №2:

Используйте этот запрос на извлечение, ошибка исправлена. В последнем коммите есть ошибка.

Комментарии:

1. вы должны были прокомментировать это вместо публикации ответа.

2. Я действительно использовал этот, ошибка не была исправлена