#android #url #android-mediaplayer
Вопрос:
Я сделал в течение некоторого времени приложение с медиаплеером. Но после ряда обновлений я понял, что пространство, необходимое для загрузки приложения, стало очень большим. Я решил изменить метод и заставить плееры воспроизводить музыку через Интернет по URL-ссылке, но я понятия не имею, как это сделать. Я считаю, что я должен установить mediaplayer.setDataSource, а затем поместить ссылку. Но после этого он не работает с моим кодом. Кто-нибудь знает, как преобразовать мой код для работы этим методом?
Часть моего текущего кода:
mediaPlayer = MediaPlayer.create(this,R.raw.storm);
runnable = new Runnable() {
@Override
public void run() {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
handler.postDelayed(this,500);
}
};
int duration = mediaPlayer.getDuration();
String sDuration = convertFormat(duration);
playerDuration.setText(sDuration);
btPlay.setOnClickListener(v -> {
mediaPlayer.start();
seekBar.setMax(mediaPlayer.getDuration());
handler.postDelayed(runnable, 0);
btPlay.setVisibility(View.GONE);
btPause.setVisibility(View.VISIBLE);
});
btPause.setOnClickListener(v -> {
mediaPlayer.pause();
btPlay.setVisibility(View.VISIBLE);
btPause.setVisibility(View.GONE);
handler.removeCallbacks(runnable);
});
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
if (b) {
mediaPlayer.seekTo((int) progress);
}
playerPosition.setText(convertFormat(mediaPlayer.getCurrentPosition()));
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mediaPlayer.setOnCompletionListener(mp -> {
btPause.setVisibility((View.GONE));
btPlay.setVisibility(View.VISIBLE);
mediaPlayer.seekTo(0);
});
}
Ответ №1:
Пожалуйста, попробуйте использовать приведенный ниже код для воспроизведения музыки по URL
Kotlin:
val mediaPlayer = MediaPlayer()
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)
try {
mediaPlayer.setDataSource(yourSongUrl)
mediaPlayer.prepare()
mediaPlayer.start()
} catch (e: IOException) {
e.printStackTrace()
}
Log.v(TAG,"Music is streaming")
Java:
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(yourSongUrl);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
Log.v(TAG,"Music is streaming")
Если вы ориентируетесь на уровень API 26 или выше, theb setAudioStreamType()
устарел. Поэтому попробуйте выполнить приведенный ниже код:
//java
mediaPlayer.setAudioAttributes(
new AudioAttributes
.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build());
//Kotlin
mediaPlayer.setAudioAttributes(
AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
)
Примечание: Добавьте разрешение на доступ в Интернет в manifest.xml
файл
<uses-permission android:name="android.permission.INTERNET" />
и последнее, но не менее важное: вам нужно дождаться воспроизведения музыки, потому что она воспроизводит звук с URL-адреса, поэтому это занимает время, а также зависит от скорости интернета пользователя