본문 바로가기
프레임워크/flutter

[Error]platformException

by seongjko 2023. 11. 24.
728x90

목적: 

audioplayers package를 이용해서 해동이 완료되었을 때 알람을 울리는 기능 만들기 

 

문제:

아래의 코드를 돌렸을 때, 

late final _player = AudioPlayer();
  
Future<void> playNotificationSound() async {
	await _player.setSource(AssetSource('audios/alarm_sound.wav'));
  	}

 

아래와 같은 문제가 발생

PlatformException (PlatformException(AndroidAudioError, null, java.lang.IllegalStateException
	at android.media.MediaPlayer._prepareAsync(Native Method)
	at android.media.MediaPlayer.prepareAsync(MediaPlayer.java:1369)
	at xyz.luan.audioplayers.player.MediaPlayerPlayer.prepare(MediaPlayerPlayer.kt:92)
	at xyz.luan.audioplayers.player.WrappedPlayer.configAndPrepare(WrappedPlayer.kt:371)
	at xyz.luan.audioplayers.player.WrappedPlayer.setSource(WrappedPlayer.kt:33)
	at xyz.luan.audioplayers.AudioplayersPlugin.methodHandler(AudioplayersPlugin.kt:127)
	at xyz.luan.audioplayers.AudioplayersPlugin.access$methodHandler(AudioplayersPlugin.kt:29)
	at xyz.luan.audioplayers.AudioplayersPlugin$onAttachedToEngine$1$1.invoke(AudioplayersPlugin.kt:50)
	at xyz.luan.audioplayers.AudioplayersPlugin$onAttachedToEngine$1$1.invoke(AudioplayersPlugin.kt:50)
	at xyz.luan.audioplayers.AudioplayersPlugin$safeCall$1.invokeSuspend(AudioplayersPlugin.kt:75)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42)
	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
, null))

 

해결과정:

소름.. 플러터는 모든 게 클래스라더니 이것도 클래스였어?

https://api.flutter.dev/flutter/services/PlatformException-class.html

 

PlatformException class - services library - Dart API

Thrown to indicate that a platform interaction failed in the platform plugin. See also: Implemented types Constructors PlatformException({required String code, String? message, dynamic details, String? stacktrace}) Creates a PlatformException with the spec

api.flutter.dev

공식문서의 설명은 이렇다.

Thrown to indicate that a platform interaction failed in the platform plugin.

즉, platform plugin에서 platform interaction이 실패했을 때 이런 문제가 발생한다.

이 부분에 대해 좀더 자세히 알아보다가 성질나서 그만두고 

assets_audio_player라는 패키지를 이용해서 해결했다. 코드는 아래와 같다.

  Future<void> playNotificationSound() async {
    assetsAudioPlayer.open(
      Audio("assets/audios/alarm_sound.wav"),
    );
  }

 

느낀 점:

에러를 찾으면 제발 흥분하지 말자. 

차분하고 조용하게 착착착 거슬러 올라가야 한다. 

그리고 새로운 패키지 쓸 때 readme 좀 제발 제대로 읽자.

이미 검증된 루트가 있는데 굳이 블로그에 쓰여있는 불확실한 방법을 

우선하여 사용할 이유가 없다.

반응형