Я пытаюсь запустить мультимедиа через Android MediaPlayer с некоторой ссылкой API (таким образом, не имеет .mp3 в конце URL) следующим образом:
Код Android:
headers.put("token", token_value);
myPlayer.setDataSource(
getApplicationContext(),
Uri.parse(url),//url : http://basedomain.com/api/getmp3
headers
);
Код внутреннего кода:
$song_path = "abc.mp3";
$path = storage_path().DIRECTORY_SEPARATOR."somefolder".DIRECTORY_SEPARATOR.$song_path;
$response = new BinaryFileResponse($path);
return $response;
Я получаю двоичный ответ от кода laravel (проверено почтальоном), однако код Android не воспроизводит музыку из ответа laravel.
Список вопросов для Android:
1) W / MediaPlayer: не удалось открыть http://basedomain.com/api/getmp3: java.io.FileNotFoundException: нет поставщика контента: http://basedomain.com/api/getmp3
2) E / MediaPlayer: ошибка (1, -2147483648)
3 ответа
Я наконец нашел причину этой проблемы. Мой бэкэнд-вызов laravel api был POST-запросом. Изменение того же самого запроса Get сработало для меня. Также изменение запроса с POST на GET не было проблемой, так как параметры моего запроса были отправлены через заголовок. (Это было сделано потому, что метод setDataSource для android mediaplayer принимает только заголовки, а не параметры тела).
Короче говоря, Android MediaPlayer ожидает, что мы будем использовать только запрос GET.
Попробуйте проверить свой код по URL-адресу известного общедоступного mp3-файла, чтобы убедиться в правильности кода MediaPlayer. Как только это сработает, вы можете сузить проблему до того, что токен будет установлен неправильно или ваш сервер не вернет mp3-файл правильно. Возможно, ответ не указывает, что это mp3-файл правильно, и, следовательно, медиаплеер не знает, как с этим справиться.
Я только что попробовал следующий код в Android Studio для Android SDK 28, и он отлично работает. Убедитесь, что ваш API действительно возвращает файл mp3.
try {
MediaPlayer player = new MediaPlayer();
player.setDataSource("https://yourdomain/yourmusic.mp3");
player.prepare();
player.start();
} catch (IOException e) {
e.printStackTrace();
}
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .