MediaPlayer не работает на OnePlus - почему? - PullRequest
0 голосов
/ 09 марта 2019

Я сделал радио приложение, которое работает без проблем на Android 5 и выше. Проблема в том, что несколько пользователей сообщили мне, что приложение вылетает на устройствах OnePlus, что странно, потому что на той же версии Android, но на другом устройстве, оно работает без проблем.

Мне удалось найти друга, у которого есть OnePlus, однако он из другой страны, поэтому я не могу заставить устройство отладить. Тем не менее, я послал ему apk отладки, и он прислал мне это Изображение

Я предполагаю, что проблема начинается здесь:

private void initializeMediaPlayer() {
    player = new MediaPlayer();
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        player.setAudioAttributes(new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .build());
    } else {
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }
    try {
        player.setDataSource("http://91.121.139.194:8157/stream.mp3");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

OnePlus обрабатывает MediaPlayer по-другому? В чем может быть проблема? Я искал эту ошибку в Интернете, но все, что я нашел, было о кодировании источника, который я уже сделал.

ОБНОВЛЕНИЕ: После некоторой дополнительной отладки мы также выяснили точный путь к файлу Shoutcast MP3. После того, как я установил источник данных на точный путь, ошибок нет. Нет ошибок logcat и ошибок отладочной консоли ... Но это не работает.

1 Ответ

0 голосов
/ 10 марта 2019

он ожидает Context & Uri в качестве аргументов, а не String представление URL. кроме того, вы используете устаревшие методы (которые, тем не менее, все еще указаны в примерах) и никогда не вызываете .prepare () , поэтому MediaPlayer застрянет в состоянии initialized, но не войдет в prepared состояние, которое является предварительным условием для воспроизведения.

player.setDataSource(context, Uri.parse("http://91.121.139.194:8157/stream.mp3"));
player.prepare(); // this is a synchronous call (see the diagram).
player.start();

см. MediaPlayer и Обзор MediaPlayer , который объясняет все это подробно.


PS: shoutcast? также может использоваться в сочетании с stunnel, чтобы обеспечить шифрование SSL - так, чтобы была соблюдена политика безопасности сети по умолчанию, без требования исключения.

...