Canardoux / flutter_sound

Flutter plugin for sound. Audio recorder and player.
Mozilla Public License 2.0
859 stars 562 forks source link

[BUG]: Calls to setAudioFocus on Android throw an error #612

Open mhstoller opened 3 years ago

mhstoller commented 3 years ago

Flutter Sound Version :

Severity

Platforms you faced the error

Android 10 physical device

Your problem

Describe the bug calling setAudioFocus throws a "Failed to handle method call" error

To Reproduce Steps to reproduce the behavior:

  1. Create an instance of FlutterSoundRecorder
  2. Call setAudioFocus

Logs

E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522): Failed to handle method call
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522): java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at com.dooboolab.fluttersound.FlutterSoundRecorder.setAudioFocus(FlutterSoundRecorder.java:259)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at com.dooboolab.fluttersound.FlutterSoundRecorderManager.onMethodCall(FlutterSoundRecorderManager.java:103)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at android.os.MessageQueue.next(MessageQueue.java:336)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at android.os.Looper.loop(Looper.java:174)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at android.app.ActivityThread.main(ActivityThread.java:7682)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
E/MethodChannel#com.dooboolab.flutter_sound_recorder(26522):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
I/flutter (26522): PlatformException(error, Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference, null, java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
I/flutter (26522):  at com.dooboolab.fluttersound.FlutterSoundRecorder.setAudioFocus(FlutterSoundRecorder.java:259)
I/flutter (26522):  at com.dooboolab.fluttersound.FlutterSoundRecorderManager.onMethodCall(FlutterSoundRecorderManager.java:103)
I/flutter (26522):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
I/flutter (26522):  at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
I/flutter (26522):  at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
I/flutter (26522):  at android.os.MessageQueue.nativePollOnce(Native Method)
I/flutter (26522):  at android.os.MessageQueue.next(MessageQueue.java:336)
I/flutter (26522):  at android.os.Looper.loop(Looper.java:174)
I/flutter (26522):  at android.app.ActivityThread.main(ActivityThread.java:7682)
I/flutter (26522):  at java.lang.reflect.Method.invoke(Native Method)
I/flutter (26522):  at co
I/flutter (26522): #0      StandardMethodCodec.decodeEnvelope
 package:flutter/…/services/message_codecs.dart
I/flutter (26522): #1      MethodChannel._invokeMethod
 package:flutter/…/services/platform_channel.dart
I/flutter (26522): <asynchronous suspension>
I/flutter (26522): #2      MethodChannel.invokeMethod
 package:flutter/…/services/platform_channel.dart
I/flutter (26522): #3      MethodChannelFlutterSoundRecorder.invokeMethodVoid
 package:flutter_sound_platform_interface/method_channel_flutter_sound_recorder.dart
I/flutter (26522): #4      MethodChannelFlutterSoundRecorder.setAudioFocus
 package:flutter_sound_platform_interface/method_channel_flutter_sound_recorder.dart
I/flutter (26522): #5      FlutterSoundRecorder.setAudioFocus
 package:flutter_sound_lite/public/flutter_sound_recorder.dart
I/flutter (26522): #6      VoiceRecordBloc.stopRecording
 package:voice_app/recorder/voice_record_bloc.dart
I/flutter (26522): <asynchronous suspension>
I/flutter (26522): #7      VoiceRecordButton.build.<anonymous closure>.<anonymous closure>
 package:voice_app/recorder/voice_record_widget.dart
I/flutter (26522): #8      RenderPointerListener.handleE
E/flutter (26522): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The getter 'filePath' was called on null.
E/flutter (26522): Receiver: null
E/flutter (26522): Tried calling: filePath
E/flutter (26522): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
E/flutter (26522): #1      VoiceRecordButton.build.<anonymous closure>.<anonymous closure>
 package:voice_app/recorder/voice_record_widget.dart
E/flutter (26522): <asynchronous suspension>
E/flutter (26522): #2      VoiceRecordButton.build.<anonymous closure>.<anonymous closure> (package:voice_app/recorder/voice_record_widget.dart)
 package:voice_app/recorder/voice_record_widget.dart
E/flutter (26522): #3      RenderPointerListener.handleEvent
 package:flutter/…/rendering/proxy_box.dart
E/flutter (26522): #4      GestureBinding.dispatchEvent
 package:flutter/…/gestures/binding.dart
E/flutter (26522): #5      RendererBinding.dispatchEvent
 package:flutter/…/rendering/binding.dart
E/flutter (26522): #6      GestureBinding._handlePointerEvent
 package:flutter/…/gestures/binding.dart
E/flutter (26522): #7      GestureBinding._flushPointerEventQueue
 package:flutter/…/gestures/binding.dart
E/flutter (26522): #8      GestureBinding._handlePointerDataPacket
 package:flutter/…/gestures/binding.dart
E/flutter (26522): #9      _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter (26522): #10     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (26522): #11     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (26522): #12     _invoke1 (dart:ui/hooks.dart:265:10)
E/flutter (26522): #13     _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)
E/flutter (26522):
D/DecorView(26522): onWindowFocusChangedFromViewRoot hasFocus: true, DecorView@35e6c1a[MainActivity]
Larpoux commented 3 years ago

Did you open your Audio Session before calling setAudioFocus() ? What are the parameters that you give to setAudioFocus() ?

Note : I plan to clean the Audio Focus handling very soon.

mhstoller commented 3 years ago

Did you open your Audio Session before calling setAudioFocus() ? What are the parameters that you give to setAudioFocus() ?

Note : I plan to clean the Audio Focus handling very soon.

Yes, I opened the audio session. Any parameters in setAudioFocus cause the error, I am calling it like this:

await recorder.openAudioSession(
        focus: AudioFocus.doNotRequestFocus,
      );

//Later on in the code (causes error)
await recorder.setAudioFocus(
        focus: AudioFocus.requestFocusAndStopOthers,
        mode: SessionMode.modeVoiceChat,
        category: SessionCategory.playAndRecord,
      );

//Stop recording
await recorder.stopRecorder();
await recorder.setAudioFocus(focus: AudioFocus.abandonFocus); //causes error

It happens using the default constructor as well; recorder.setAudioFocus(). The same code works on iOS with no error

Larpoux commented 3 years ago

I am going to clean this f***ing Audio Focus handling. I will look to your issue. Please keep it open.

fejofj commented 8 months ago
 await soundRecorder?.setAudioFocus(
          focus: AudioFocus.requestFocusAndStopOthers); // error on this line

version : flutter_sound_lite: ^8.5.0 Flutter version : 3.10.6 device : Redmi 6A (Physical device) Android version : Android 9 (API 28)

I/flutter (21126): ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── I/flutter (21126): │ #0 FlutterSoundRecorder.setAudioFocus (package:flutter_sound_lite/public/flutter_sound_recorder.dart:870:13) I/flutter (21126): │ #1 SoundRecorder.record (package:maiacare/screens/care_notes/view/audio_recorder.dart:59:28) I/flutter (21126): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ I/flutter (21126): │ 🐛 FS:---> setAudioFocus I/flutter (21126): └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── I/flutter (21126): ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── I/flutter (21126): │ #0 FlutterSoundRecorder._setAudioFocus (package:flutter_sound_lite/public/flutter_sound_recorder.dart:887:13) I/flutter (21126): │ #1 FlutterSoundRecorder.setAudioFocus. (package:flutter_sound_lite/public/flutter_sound_recorder.dart:872:13) I/flutter (21126): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ I/flutter (21126): │ 🐛 FS:---> setAudioFocus I/flutter (21126): └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): Failed to handle method call E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at com.dooboolab.fluttersound.FlutterSoundRecorder.setAudioFocus(FlutterSoundRecorder.java:314) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at com.dooboolab.fluttersound.FlutterSoundRecorderManager.onMethodCall(FlutterSoundRecorderManager.java:100) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at android.os.Handler.handleCallback(Handler.java:873) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at android.os.Handler.dispatchMessage(Handler.java:99) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at android.os.Looper.loop(Looper.java:201) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at android.app.ActivityThread.main(ActivityThread.java:6820) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at java.lang.reflect.Method.invoke(Native Method) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) E/MethodChannel#com.dooboolab.flutter_sound_recorder(21126): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:922) [GETX] ERROR #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7)

1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:310:18)

#2 FlutterSoundRecorder._setAudioFocus (package:flutter_sound_lite/public/flutter_sound_recorder.dart:893:5) #3 FlutterSoundRecorder.setAudioFocus. (package:flutter_sound_lite/public/flutter_sound_recorder.dart:872:7) #4 BasicLock.synchronized (package:synchronized/src/basic_lock.dart:33:16) #5 FlutterSoundRecorder.setAudioFocus (package:flutter_sound_lite/public/flutter_sound_recorder.dart:871:5) #6 SoundRecorder.record (package:maiacare/screens/care_notes/view/audio_recorder.dart:59:7) #7 SoundRecorder.toggleRecording (package:maiacare/screens/care_notes/view/audio_recorder.dart:81:7) #8 _MessageBoxState.textMessageWidget. (package:maiacare/screens/care_stream/widgets/message_textbox.dart:406:15) [GETX] ERROR PlatformException(error, Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference, null, java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference at com.dooboolab.fluttersound.FlutterSoundRecorder.setAudioFocus(FlutterSoundRecorder.java:314) at com.dooboolab.fluttersound.FlutterSoundRecorderManager.onMethodCall(FlutterSoundRecorderManager.java:100) at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:258) at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:295) at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:322) at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6820) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:922) ) I/maiacare.devap(21126): Background concurrent copying GC freed 93151(4MB) AllocSpace objects, 3(80KB) LOS objects, 50% free, 4MB/9MB, paused 210us total 188.939ms
github-actions[bot] commented 5 months ago

This issue is stale because it has been open 90 days with no activity. Leave a comment or this will be closed in 7 days.

Larpoux commented 5 months ago

This issue should be analysed