gpt4 book ai didi

android - 在 WebView 中手动处理 MP3 下载

转载 作者:行者123 更新时间:2023-11-29 22:20:46 26 4
gpt4 key购买 nike

我有这段代码,我想在其中处理被点击文件的下载:

else if (url.startsWith("http://rapahh.com/songs2/Music%20Promotion/Download/")) {


}
return false;

虽然我不知道如何处理 Android 中的下载,但有没有人有一段代码我可以用来在后台将文件下载到文件夹中。下载文件夹很好。谢谢。

最佳答案

您要为哪个版本的 android 构建?

从 API 级别 9 开始,有 DownloadManager可以为你处理这个。如果可能,您应该使用 DownloadManager,因为它会自动处理网络中断并为您恢复下载。

如果您的目标是低于此级别的 API,则必须自己制作下载代码。您将有一个来自 Web 源的 inputStream 和一个转到本地文件的 outputStream,您将循环遍历 inputStream 写入 block ,直到没有剩余。像这样:

try {

URL url = new URL(URL); //URL of the video

//Set our file to the correct path and name.
File file = new File(PATH + fileName);

//keep the start time so we can display how long it took to the Log.
long startTime = System.currentTimeMillis();
Log.d(myTag, "download begining");
//Log.d(myTag, "download url:" + url);
Log.d(myTag, "downloaded file name:" + fileName);


/* Open a connection to that URL. */
URLConnection ucon = url.openConnection();

// this will be useful so that you can show a tipical 0-100% progress bar
int lenghtOfFile = ucon.getContentLength();

Log.i(myTag, "Opened Connection");

/************************************************
* Define InputStreams to read from the URLConnection.
************************************************/
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
Log.i(myTag, "Got InputStream and BufferedInputStream");

/************************************************
* Define OutputStreams to write to our file.
************************************************/
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
Log.i(myTag, "Got FileOutputStream and BufferedOutputStream");

/************************************************
* Start reading the and writing our file.
************************************************/
byte data[] = new byte[1024];
long total = 0;
int count;
//loop and read the current chunk
while ((count = bis.read(data)) != -1) {
//Post our progress update back to the UI thread
postProgress((int)(total*100/lenghtOfFile));

//write this chunk
total += count;
bos.write(data, 0, count);
}
//Have to call flush or the video file can get corrupted and won't play correctly.
bos.flush();
bos.close();

Log.d(myTag, "download ready in "
+ ((System.currentTimeMillis() - startTime))
+ " milisec");
} catch (IOException e) {
Log.d(myTag, "Error: " + e);
}

您需要实现 postProgress(int progress) 方法来执行适合您的应用程序的任何操作,以通知用户下载完成的百分比。

编辑:

您可以注释掉日志以使其正常工作。我在调试时让它们保持打开状态,尽管这样可以使过程更容易。日志语句,例如 Log.i(String tag, String text)类似于System.out.println(String txt) 不同的是,这些语句被打印到日志文件中(你可以在eclipse中的DDMS透视图中看到)并且它们有一个额外的参数叫做“标签”你可以传递任何你喜欢的字符串,这个字符串将显示在日志文件中你的文本旁边。您还可以在 DDMS 透视图中过滤基于这些标签的日志输出。通常的做法是将您的标签声明为静态字符串,这样您就可以将对它的引用用于所有日志语句,并且可以保证始终具有相同的标签。因此,如果您将类似这样的内容添加到您的类(class)中,它应该会修复您的错误:

final static String myTag = "NameOfYourActivity";

关于android - 在 WebView 中手动处理 MP3 下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288109/

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