0

我需要从 Android 中的以下 URL 下载 pdf。知道如何做到这一点:

http://bkinfo.in/Murli/1305/EME-26-05-2013.pdf

同样有一个mp3: http ://bkinfo.in/Murli/1305/26-05-2013.mp3

欣赏这些想法..

最后......这是我使用的完整代码。可能对某人有用..将这些添加到清单中:

确保您的 AVD 可以写入 SDCard(如果您正在写入卡)。您可以通过在 AVD Manager 中将内存块分配给 SDCard 来设置它。

    public class MainActivity extends Activity {
            static ProgressDialog pd;
            protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    pd = new ProgressDialog(this);
                    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    pd.setCancelable(false);
                    AsyncTaskTest at = new AsyncTaskTest();
                    at.execute();
            }

            public class AsyncTaskTest extends AsyncTask<Void, Integer, Integer> {
                    Session s = null;
                    protected void onPreExecute(){
                            pd.show();
                    }

                    protected Integer doInBackground(Void... vd){
                            try{
                                    String[] urls = new String[3];
                                    urls[0] = "http://bkinfo.in/Murli/1305/HMS-25-05-2013.pdf";
                                    urls[1] = "http://bkinfo.in/Murli/1305/EME-25-05-2013.pdf";
                                    urls[2] = "http://bkinfo.in/Murli/1305/25-05-2013.mp3";
                                    String fileName = urls[2].substring(urls[2].lastIndexOf("/")+1); //Coupying the mp3
                                    URL url = new URL(urls[2]);
                                    URLConnection conection = url.openConnection();
                                    conection.setConnectTimeout(10000);
                                    conection.connect();
                                    int lenghtOfFile = conection.getContentLength();
                                    InputStream input = new BufferedInputStream(url.openStream(),8192);
                                    OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory()+"/"+fileName);
                                    byte data[] = new byte[1024];
                                    long total = 0;
                                    while ((count = input.read(data)) != -1){
                                            total += count;
                                            output.write(data, 0, count);
                                            publishProgress((int) ((total * 100) / lenghtOfFile));
                                    }
                                    output.flush();
                                    output.close();
                                    input.close();
                            }catch(Exception e){
                                    Log.e("MyError:",e.toString());
                            }
                            return 0;
                    }

                    protected void onProgressUpdate(Integer... msg) {
                            pd.setProgress(msg[0]);
                    }

                    protected void onPostExecute(Integer in){
                            pd.dismiss();
                            showDialog("Done !");
                    }

                    private void showDialog(String msg){
                    final AlertDialog.Builder alertBox = new AlertDialog.Builder(new ContextThemeWrapper(MainActivity.this, android.R.style.Theme_Dialog));
                    alertBox.setMessage(msg);
                    alertBox.setCancelable(false)
                                    .setPositiveButton("Ok", new DialogInterface.OnClickListener(){
                                    public void onClick(DialogInterface dialog,int id){
                                            dialog.cancel();
                                    }
                            }).show();
                    }
            }
    }
4

1 回答 1

0

希望我不是勺子喂食!我有一段艰难的时光,所以我决定分享我的工作代码。

private void downloadCommandFile(String dlUrl){
    int count;
    try {
        URL url = new URL( dlUrl );
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setDoInput(true);
        con.setDoOutput(true);
        con.connect();
        int fileSize = con.getContentLength();
        Log.d("TAG", "Download file size = " + fileSize );
        InputStream is = url.openStream();
        String dir = Environment.getExternalStorageDirectory() + "dl_directory";
        File file = new File( dir );
        if( !file.exists() ){
            file.mkdir();
        }

        FileOutputStream fos = new FileOutputStream(file + "EME-26-05-2013.pdf");
        byte data[] = new byte[1024];

        while( (count = is.read(data)) != -1 ){
            fos.write(data, 0, count);
        }

        is.close();
        fos.close();


    } catch (Exception e) {
        Log.e("TAG", "DOWNLOAD ERROR = " + e.toString() );
    }

}




public class DownloadTask extends AsyncTask<String, Void, String>{

    @Override
    protected String doInBackground(String... params) {
             String url = "http://bkinfo.in/Murli/1305/EME-26-05-2013.pdf"; // your url here
        downloadCommandFile( url);
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // download complete
    }

}

调用异步任务如下:

new DownloadTask().execute();

并且不要忘记将其添加到您的清单文件中:

<uses-permission android:name="android.permission.INTERNET"/>
于 2013-05-28T02:23:26.873 回答