Почему MediaPlayer не запускается?

У меня есть звук, который должен начинаться, когда начинается действие onCreate, потому что это сигнал тревоги. Проблема в том, что звуки не запускаются. Я проверил громкость, она включена.

Это код для медиаплеера:

    String tone = intent.getStringExtra("reminderTone");

    MediaPlayer mPlayer = new MediaPlayer();
    try {
        Log.d("log", "try");
        if (tone != null && !tone.equals("")) {
            Log.d("log", "tone is not null");
            Uri toneUri = Uri.parse(tone);
            if (toneUri != null) {
                Log.d("log", "mediaplayer starts");
                mPlayer.setDataSource(this, toneUri);
                mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
                mPlayer.setLooping(true);
                mPlayer.prepare();
                mPlayer.start();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

и это вывод журнала

08-09 10:55:33.316  20706-20706/? D/log﹕ try
08-09 10:55:33.317  20706-20706/? D/log﹕ tone is not null
08-09 10:55:33.317  20706-20706/? D/log﹕ mediaplayer starts

Я уже проверил "reminderTone", в нем есть строковый URI.

Вот как выглядит строковый URI. "android.media.Ringtone@ab91882"

Я использовал другой источник звука для тестирования, и этот работает:

    //play ringtone
    final MediaPlayer sounds = MediaPlayer.create(this, R.raw.sample);
    sounds.start();

Ребята, вы знаете, что с этим не так?


person stanley santoso    schedule 09.08.2015    source источник
comment
проверьте, действительно ли этот код выполняется или нет .... Я имею в виду, если это должно запускаться по щелчку, проверьте, вызывается ли его onClickListener или нет. Больше кода будет полезно.   -  person Naveen Rao    schedule 09.08.2015
comment
весь код onCreate. Я предоставил некоторые журналы и вывод журнала. как вы можете видеть, медиаплеер вызывался. но не играет.   -  person stanley santoso    schedule 09.08.2015
comment
попробуйте воспроизвести какой-нибудь локальный медиафайл, скопировав его в папку ресурсов, и проверьте, что что-то не так с вашим tone (исходным кодом)   -  person Naveen Rao    schedule 09.08.2015
comment
Вы пробовали с эмулятором? потому что в эмуляторе по умолчанию нет рингтонов.   -  person yshahak    schedule 09.08.2015
comment
@NaveenRao Я использовал образец локального файла для воспроизведения звука, как показано в обновленном вопросе, и он работает.   -  person stanley santoso    schedule 09.08.2015
comment
@yshahak нет, я использую свой телефон на Android.   -  person stanley santoso    schedule 09.08.2015


Ответы (2)


Вам нужно проверить свой URI, убедитесь, что вы используете правильный URI.

Примечание. Строка URI отличается для каждого носителя, который вы вызываете, в моем примере я предполагаю, что вы ищете музыку в своей необработанной папке.

int i = R.raw.sample; // we assume that we want to get the URI of our sound from our RAW folder.
String uri = android.resource://com.example.myproject/" + i;

Для воспроизведения музыки вы можете использовать этот простой метод

 MediaPlayer player = null;

 public void playMusic(int i) throws RemoteException {
            try {

                if (player == null)
                    player = new MediaPlayer();

                player.reset(); // optional if you want to repeat calling this method
                player.setDataSource(getApplicationContext(), uri);
                player.prepare();
                player.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
 }

Полный рабочий пример можно скачать здесь: Учебное пособие по музыкальному проигрывателю.

person neferpitou    schedule 09.08.2015
comment
как написано в моем вопросе. Строка URI моей музыки выглядит примерно так, в зависимости от того, что выбрано из библиотеки: android.media.Ringtone@ab91882 . Я понятия не имею, правильно ли это, так как я не знаком с этим. Как вы думаете, это правильный формат для строки URI рингтона? - person stanley santoso; 09.08.2015
comment
В моем примере правильным аргументом URI будет 'android.resource://com.example.myproject/ + ‹Resource ID›' , поэтому предоставленная вами строка не будет работать, и это неправильный URI. - person neferpitou; 09.08.2015
comment
Если я правильно понимаю, ваш String URI основан на локальном музыкальном файле, который находится внутри проекта приложения. Тот, что у меня есть, основан на локальном музыкальном файле с телефона. Это все еще неправильный URI? - person stanley santoso; 09.08.2015
comment
Да, это способ вызвать локальное разрешение, а для других носителей это будут другие аргументы uri. - person neferpitou; 09.08.2015
comment
это пример получения чего-либо внутри SD-карты stackoverflow.com/questions/8296182/ - person neferpitou; 09.08.2015
comment
хорошо. так что мой URI, вероятно, прав. потому что я получил его из средства выбора мелодии звонка. так должно быть правильно - person stanley santoso; 09.08.2015

person    schedule
comment
Хотя это кажется правильным, всегда объясняйте свой ответ, чтобы пользователь мог понять, что представляет собой этот код/что он делает. - person Bonatti; 24.05.2016