我正在尝试将互联网上的MP3文件下载到Android中的SD卡。 我知道桌面Java等价,但因为我想利用一些有趣的基于Android的SDK,所以我决定尝试编写移动应用程序。
要学到很多东西,我觉得我跳了很多步。
我在Java中做了类似的事情:
File outputSong = new File("outputFolder/testSong.mp3");
is1 = new URL(currentSong).openStream();
ReadableByteChannel rbc = Channels.newChannel(is1);
FileOutputStream fos = new FileOutputStream(outputSong);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
但Android并不喜欢这样。我看了这里,developer.android网站,以及一些关于如何处理文件的互联网教程。我试过这样做:
String currentSong = "http://nyan.90g.org/e/1/50/9f755b639fa518e7f5580b648c7b2f60.mp3";
String currentArtwork = "http://moefou.90g.org/wiki_cover/000/00/29/000002938.jpg";
String fileName = "";
URLConnection conn = new URL(currentArtwork).openConnection();
conn.setUseCaches(false);
int lastSlash = conn.getURL().toString().lastIndexOf('/');
if (lastSlash>=0)
fileName = conn.getURL().toString().substring(lastSlash+1);
if (fileName.equals(""))
fileName = conn.getURL().hashCode() + ".jpg";
BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
File outputArtwork = new File(Environment.getExternalStorageDirectory() + "/" + fileName);
FileOutputStream fos = new FileOutputStream(outputArtwork);
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte[] data = new byte[8192];
int bytesRead = 0;
while((bytesRead = bis.read(data, 0, data.length)) >= 0) {
bos.write(data, 0, bytesRead);
}
bos.close();
bis.close();
我让它工作ONCE,现在我没有成功尝试重复这个动作。我获得了明确的权限。如果有人能告诉我他们将如何解决这个问题,我将不胜感激。
虽然我在这,但每个人都说要使用logcat。这就像打印到控制台?这会有所帮助。