在android中从服务器下载mp3文件

时间:2011-09-15 07:54:31

标签: android download

我正在尝试创建一个可以从服务器上下载音乐文件,确切地说是.mp3的应用程序。由于我是这个Android开发领域的新手,所以我将非常感谢你们的任何帮助。 我需要一些东西开始,如果你能给我一些有用资源的链接,我将非常感激。 感谢

3 个答案:

答案 0 :(得分:12)

如果您想从任何网址播放.mp3文件,请按照nik建议的代码进行操作。

但是,如果您想从服务器下载文件并将其存储在SD卡或内部存储设备上的任何位置,请遵循此代码,

private class DownloadFile extends AsyncTask<String, Integer, String>{
@Override
protected String doInBackground(String... urlParams) {
    int count;
    try {
        URL url = new URL("url of your .mp3 file");
        URLConnection conexion = url.openConnection();
        conexion.connect();
        // this will be useful so that you can show a tipical 0-100% progress bar
        int lenghtOfFile = conexion.getContentLength();

        // downlod the file
        InputStream input = new BufferedInputStream(url.openStream());
        OutputStream output = new FileOutputStream("/sdcard/somewhere/nameofthefile.mp3");

        byte data[] = new byte[1024];

        long total = 0;

        while ((count = input.read(data)) != -1) {
            total += count;
            // publishing the progress....
            publishProgress((int)(total*100/lenghtOfFile));
            output.write(data, 0, count);
        }

        output.flush();
        output.close();
        input.close();
    } catch (Exception e) {}
    return null;
}

编辑:显示权限:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

 <uses-permission android:name="android.permission.INTERNET"></uses-permission>

答案 1 :(得分:2)

你可以这样做:

    try {
        MediaPlayer player = new MediaPlayer();
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.setDataSource("http://xty/MRESC/images/test/xy.mp3");
        player.prepare();
        player.start();

    } catch (Exception e) {
        // TODO: handle exception
    }

明确许可:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

答案 2 :(得分:1)

使用此方法

private void beginDownload(){
/*
Create a DownloadManager.Request with all the information necessary to start the download
 */
DownloadManager.Request request=new DownloadManager.Request(Uri.parse("http://examplewebsite.com/aaa.mp3"))
        .setTitle("Dummy File")// Title of the Download Notification
        .setDescription("Downloading")// Description of the Download Notification
        .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)// Visibility of the download Notification
      // Uri of the destination file    
   .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "" + System.currentTimeMillis());   
        .setRequiresCharging(false)// Set if charging is required to begin the download
        .setAllowedOverMetered(true)// Set if download is allowed on Mobile network
        .setAllowedOverRoaming(true);// Set if download is allowed on roaming network
DownloadManager downloadManager= (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
downloadID = downloadManager.enqueue(request);// enqueue puts the download request in the queue.

}   

这是完整的代码

private Button btnDownload;
private long downloadID;

private BroadcastReceiver onDownloadComplete = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        //Fetching the download id received with the broadcast
        long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
        //Checking if the received broadcast is for our enqueued download by matching download id
        if (downloadID == id) {
            Toast.makeText(MainActivity.this, "Download Completed", Toast.LENGTH_SHORT).show();
        }
    }
};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button=findViewById(R.id.download);

    registerReceiver(onDownloadComplete,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

    btnDownload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            beginDownload();
        }
    });
}

@Override
public void onDestroy() {
    super.onDestroy();
    unregisterReceiver(onDownloadComplete);
}

private void beginDownload(){
    File file=new File(getExternalFilesDir(null),"Dummy");
    /*
    Create a DownloadManager.Request with all the information necessary to start the download
     */
    DownloadManager.Request request=new DownloadManager.Request(Uri.parse("http://speedtest.ftp.otenet.gr/files/test10Mb.db"))
            .setTitle("Dummy File")// Title of the Download Notification
            .setDescription("Downloading")// Description of the Download Notification
            .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)// Visibility of the download Notification
            .setDestinationUri(Uri.fromFile(file))// Uri of the destination file
            .setRequiresCharging(false)// Set if charging is required to begin the download
            .setAllowedOverMetered(true)// Set if download is allowed on Mobile network
            .setAllowedOverRoaming(true);// Set if download is allowed on roaming network
    DownloadManager downloadManager= (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
    downloadID = downloadManager.enqueue(request);// enqueue puts the download request in the queue.