我想播放一个音乐文件,该文件将从云存储服务(例如Google驱动器或Mega.nz)中检索。我共享了文件,因此知道链接的任何人都可以访问它。
我正在使用MediaPlayer
类来处理此播放。因此,当我尝试直接链接something like this时,效果很好。但是,当我尝试使用Google云端硬盘such as this中的链接时,该链接不起作用。
这是我用来播放音乐文件的一些代码:
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进行播放。但是由于它不起作用,所以我想知道两件事:
setDataSource(url)
方法。setDataSource()
方法一起使用的正确格式,那么如何存储具有所需URL格式的音乐文件? (正确的格式,我认为:“ http://domain/path/audiofilename.mp3”)。我正在访问本地计算机上的数据库。答案 0 :(得分:0)
您将答案隐藏在问题本身中。当您将直接下载链接传递到音乐时,它可以正常工作,这意味着您需要使用能够直接下载文件的工具。
当您提供Google云端硬盘链接时,并没有提供文件的完整地址,而是转到了告诉您手动下载文件的页面。
您应该使用FirebaseStorage
之类的歌曲来存储歌曲,这样就可以直接获得这些歌曲的下载链接。