Я хочу воспроизвести музыкальный файл, который будет извлечен из облачного хранилища (например, Google drive или Mega.nz).Я поделился файлом, чтобы любой, у кого есть ссылка, мог получить к нему доступ.
Я использую класс MediaPlayer
для обработки этого воспроизведения.Поэтому, когда я попробовал прямую ссылку примерно так , она работала хорошо.Но когда я попробовал использовать ссылку из Google Диска, , например , она не сработала.
Вот код, который я использовал для воспроизведения музыкального файла:
Класс MusicPlayerFragment
public class MusicPlayerFragment extends Fragment {
private MusicPlayer musicPlayer;
boolean isPlaying;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View layout = inflater.inflate(R.layout.fragment_music_player, container, false);
final ImageButton buttonPlayPause = layout.findViewById(R.id.button_play_pause);
buttonPlayPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isPlaying) {
musicPlayer.play();
buttonPlayPause.setImageResource(R.drawable.baseline_pause_24);
isPlaying = true;
}
else {
musicPlayer.pause();
buttonPlayPause.setImageResource(R.drawable.baseline_play_arrow_24);
isPlaying = false;
}
}
});
return layout;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
musicPlayer = new MusicPlayer();
musicPlayer.loadMedia("http://ssaurel.com/tmp/mymusic.mp3"); //work on physical device
//musicPlayer.loadMedia("https://drive.google.com/file/d/1Tj0a5f4dUMNnlPILr3vZzpPOwHKsP3Va/view?usp=sharing"); //doesn't work at all
}
}
Класс MusicPlayer
public class MusicPlayer{
private MediaPlayer mediaPlayer;
public void loadMedia(String url) {
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
try {
mediaPlayer.setDataSource(url);
mediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void play() {
if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
mediaPlayer.start();
}
}
public void pause() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
}
public void reset() {
if (mediaPlayer != null) {
mediaPlayer.reset();
}
}
public void release() {
if (mediaPlayer != null) {
mediaPlayer.release();
}
}
}
Я тоже работаю с SQL Server, который будет хранить данныемузыка и URL-адрес этого музыкального файла для воспроизведения.Но так как это не сработало, есть две вещи, которые меня интересуют:
- 1-й: Где я здесь не прав?По моему мнению, я подозреваю, что не правильно использую метод
setDataSource(url)
. - 2-й: Правильно ли использовать URL-адрес Google Drive?Если это неправильный формат для использования с каким-либо (перегруженным) методом
setDataSource()
, то как я могу сохранить музыкальный файл с нужным нужным форматом URL?(Правильный формат, как этот, я думаю: "http://domain/path/audiofilename.mp3"). Я обращаюсь к базе данных на локальной машине.