flutter_sound icon indicating copy to clipboard operation
flutter_sound copied to clipboard

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

Open mhstoller opened this issue 4 years ago • 6 comments

Flutter Sound Version :

  • FULL or LITE flavor: Lite

  • Important: Result of the command : flutter pub deps | grep flutter_sound

|-- flutter_sound_lite 7.5.3+1
|   |-- flutter_sound_platform_interface 7.5.3+1
|   |-- flutter_sound_web 7.5.3+1
|   |   |-- flutter_sound_platform_interface...

Severity

  • Error

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
[38;5;244mI/flutter (26522): #0      StandardMethodCodec.decodeEnvelope[39;49m
 package:flutter/…/services/message_codecs.dart
[38;5;244mI/flutter (26522): #1      MethodChannel._invokeMethod[39;49m
 package:flutter/…/services/platform_channel.dart
I/flutter (26522): <asynchronous suspension>
[38;5;244mI/flutter (26522): #2      MethodChannel.invokeMethod[39;49m
 package:flutter/…/services/platform_channel.dart
[38;5;244mI/flutter (26522): #3      MethodChannelFlutterSoundRecorder.invokeMethodVoid[39;49m
 package:flutter_sound_platform_interface/method_channel_flutter_sound_recorder.dart
[38;5;244mI/flutter (26522): #4      MethodChannelFlutterSoundRecorder.setAudioFocus[39;49m
 package:flutter_sound_platform_interface/method_channel_flutter_sound_recorder.dart
[38;5;244mI/flutter (26522): #5      FlutterSoundRecorder.setAudioFocus[39;49m
 package:flutter_sound_lite/public/flutter_sound_recorder.dart
[38;5;248mI/flutter (26522): #6      VoiceRecordBloc.stopRecording[39;49m
 package:voice_app/recorder/voice_record_bloc.dart
I/flutter (26522): <asynchronous suspension>
[38;5;248mI/flutter (26522): #7      VoiceRecordButton.build.<anonymous closure>.<anonymous closure>[39;49m
 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
[38;5;244mE/flutter (26522): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)[39;49m
[38;5;248mE/flutter (26522): #1      VoiceRecordButton.build.<anonymous closure>.<anonymous closure>[39;49m
 package:voice_app/recorder/voice_record_widget.dart
E/flutter (26522): <asynchronous suspension>
[38;5;248mE/flutter (26522): #2      VoiceRecordButton.build.<anonymous closure>.<anonymous closure> (package:voice_app/recorder/voice_record_widget.dart)[39;49m
 package:voice_app/recorder/voice_record_widget.dart
[38;5;244mE/flutter (26522): #3      RenderPointerListener.handleEvent[39;49m
 package:flutter/…/rendering/proxy_box.dart
[38;5;244mE/flutter (26522): #4      GestureBinding.dispatchEvent[39;49m
 package:flutter/…/gestures/binding.dart
[38;5;244mE/flutter (26522): #5      RendererBinding.dispatchEvent[39;49m
 package:flutter/…/rendering/binding.dart
[38;5;244mE/flutter (26522): #6      GestureBinding._handlePointerEvent[39;49m
 package:flutter/…/gestures/binding.dart
[38;5;244mE/flutter (26522): #7      GestureBinding._flushPointerEventQueue[39;49m
 package:flutter/…/gestures/binding.dart
[38;5;244mE/flutter (26522): #8      GestureBinding._handlePointerDataPacket[39;49m
 package:flutter/…/gestures/binding.dart
[38;5;244mE/flutter (26522): #9      _rootRunUnary (dart:async/zone.dart:1206:13)[39;49m
[38;5;244mE/flutter (26522): #10     _CustomZone.runUnary (dart:async/zone.dart:1100:19)[39;49m
[38;5;244mE/flutter (26522): #11     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)[39;49m
[38;5;244mE/flutter (26522): #12     _invoke1 (dart:ui/hooks.dart:265:10)[39;49m
[38;5;244mE/flutter (26522): #13     _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5)[39;49m
E/flutter (26522):
D/DecorView(26522): onWindowFocusChangedFromViewRoot hasFocus: true, DecorView@35e6c1a[MainActivity]

mhstoller avatar Jan 28 '21 23:01 mhstoller

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.

Larpoux avatar Jan 29 '21 09:01 Larpoux

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

mhstoller avatar Jan 29 '21 14:01 mhstoller

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

Larpoux avatar Jan 29 '21 15:01 Larpoux

 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

fejofj avatar Nov 22 '23 06:11 fejofj

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.

github-actions[bot] avatar Feb 21 '24 01:02 github-actions[bot]

This issue should be analysed

Larpoux avatar Feb 29 '24 03:02 Larpoux