开发者

Downloading an mp3 file from server in android

开发者 https://www.devze.com 2023-04-05 04:59 出处:网络
I am trying to create an app that can download music files, .mp3 to be precise, from the server.As I am a开发者_StackOverflow社区 rookie in this Android Development field so I will appreciate any help

I am trying to create an app that can download music files, .mp3 to be precise, from the server.As I am a开发者_StackOverflow社区 rookie in this Android Development field so I will appreciate any help from you guys. I need something to start on and I will really appreciate if u can give me some links for useful resources. Thanks


If you want to play the .mp3 file from any url then follow the code suggested by nik.

But if you want to download a file form the server and store it in any place on sdcard or internal storage device then follow this code,

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;
}

EDIT: manifest permission:

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

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


You can do it this way:

    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
    }

Manifest permission:

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


Use this method

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.

}   

Here is the full code

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.
0

精彩评论

暂无评论...
验证码 换一张
取 消