gpt4 book ai didi

java - 安卓在线音乐播放器

转载 作者:太空宇宙 更新时间:2023-11-04 14:14:25 25 4
gpt4 key购买 nike

我尝试构建Android在线音乐播放器,可以同时下载和播放歌曲,并且用户可以在下载时(完成下载之前)听到音乐。我使用下面的下载类和 MediaPlayer 来启动音乐,但该类仅在下载完成时工作,并且如果用户在完成下载应用程序因 NullpointExption 崩溃之前单击播放,是否有任何解决方案...!???

下载类(class)(可续传):

public class downloader {
private static boolean Stopdownloader = false;//use for stop download


public static void Stop(boolean status) {
Stopdownloader = status;
}


public static void dl(final String downloadPath, final String filePath, final Ondownloadprogress lisener) {
Thread thread = new Thread(new Runnable() {

@Override
public void run() {
try {
int downloadedSize = 0;
int fileLength = 0;
URL url = new URL(downloadPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
File file = new File(filePath);
if (file.exists()) {
connection.setRequestProperty("Range", "bytes=" + file.length() + "-");
downloadedSize = (int) file.length();
}
connection.setRequestMethod("GET");
connection.setDoInput(true);
final int FILE_SIZE = connection.getContentLength();
connection.connect();
fileLength = connection.getContentLength() + downloadedSize;
BufferedInputStream input = new BufferedInputStream(connection.getInputStream());
RandomAccessFile output = new RandomAccessFile(file, "rw");
output.seek(downloadedSize);

byte data[] = new byte[1024];
int count = 0;
int progress = 0;

while ((count = input.read(data, 0, 1024)) != -1
&& progress != 100)
{
if (Stopdownloader) {
break;
}
downloadedSize += count;
output.write(data, 0, count);
progress = (int) ((downloadedSize * 100) / fileLength);
final int ss = (int) ((downloadedSize * 100) / fileLength);
final float persent = ((float) progress / FILE_SIZE) * 100;
if (lisener != null) {
final int finalProgres = progress;
G.HANDLER.post(new Runnable() {

@Override
public void run() {
lisener.ondownload((int) ss, finalProgres, FILE_SIZE);
}
});

}
}

output.close();
input.close();
}
catch (MalformedURLException e) {}
catch (IOException e) {}
finally {}
}
});

thread.start();

}}

在MainActivity中:

    play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
downloader.dl("http://MUSIC-URL","/temp.mp3", null);
downloader.Stop(false);
MediaPlayer Music = MediaPlayer.create(G.context, Uri.parse("/temp.mp3"));
Music.start();
Music.prepare();
}
});

最佳答案

你需要在start()之前做prepare()

android引用写得很好:http://developer.android.com/reference/android/media/MediaPlayer.html

看看这个教程,http://sapandiwakar.in/tutorial-how-to-manually-create-android-media-player-controls/ ,我认为它也应该让你有所感动。

关于java - 安卓在线音乐播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27929135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com