Android Studio Emulator bug? Alarm sound keeps looping even if I set mediaPlayer.setLooping(false)

Viewed 89

I am not sure if this is just an emulator bug or did I miss something. I am writing an alarm app. My app gets a ringtone Uri with RingToneManager, then use MediaPlayer to play the ringtone Uri. I want to control whether the ringtone loops or not. It works fine on my real smartphone, as well as with the Android Studio emulator using Uri gets with RingtoneManager.TYPE_NOTIFICATION and RingtoneManager.TYPE_RINGTONE. However, if I use Uri gets with RingtoneManager.TYPE_ALARM with the emulator, it just keeps looping even if I set mediaPlayer.setLooping(false).

This seems like an emulator bug to me. However, I want to make sure I do not miss something that I need to set. I do not want to find out after the app is released and it turned out that other people's smartphones have the same problem as the emulator. Is there anything I can do or check?

Below is the related code:

activeAlarmSound = new MediaPlayer();
            activeAlarmSound.setAudioAttributes(
                    new AudioAttributes.Builder()
                            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                            .setUsage(AudioAttributes.USAGE_ALARM)
                            .build()
            );

            try {
                activeAlarmSound.setDataSource(this, Uri.parse(ringToneString));
               if (!hasBGMusic && !timeUpItem.sayDate && !timeUpItem.sayDay && !timeUpItem.sayTime) {
                    activeAlarmSound.setLooping(true);
                } else {
                    activeAlarmSound.setLooping(false);
                }
                activeAlarmSound.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        if (playedBGMusic && timeUpItem.getDismissMethod() == 0) {
                            stopSelf();
                        } else {
                            playedAlarmSound = true;
                            if (activeBGMusic == null) {
                                playBGMusic();
                            } else {
                                activeBGMusic.start();
                            }
                            if (timeUpItem.getRepeatAlarm() > 0) {
                                endAlarmHandler = new Handler();
                                endAlarmHandler.postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        if (activeBGMusic != null) {
                                            activeBGMusic.pause();
                                        }
                                        playAlarmSoundAndTime();
                                    }
                                }, timeUpItem.getRepeatAlarm() * 60000);
                            }
                        }
                    }
                });

                activeAlarmSound.prepare();
                activeAlarmSound.start();
            } catch (IOException e) {
                e.printStackTrace();
            }```
0 Answers
Related