Android - скачать mp3 на SDCARD через проблему именования URL - PullRequest
2 голосов
/ 28 июля 2011

У меня в настоящее время есть webview с различными mp3-ссылками.Если пользователь нажимает на одну из этих ссылок, всплывет alertDialog, и он может выбрать, прослушивать или скачивать файл.Хотя моя часть загрузки работает по назначению (через asynctask), в настоящее время она настроена так, что я указываю имя, которое будет называться mp3-файл на SDCARD.Мне бы хотелось, чтобы название трека соответствовало названию mp3-файла.Есть идеи, как мне это сделать?Спасибо.

Вот часть моего кода:

//so you can click on links in app and not open the actual browser. will stay in app
    private class HelloWebViewClient extends WebViewClient{     
        @Override
        public boolean shouldOverrideUrlLoading(final WebView view, final String url){
            view.loadUrl(url);
            view.getSettings().getAllowFileAccess();
            view.getSettings().setJavaScriptEnabled(true);
            //load the dropbox files so people can listen to the track
            if(url.endsWith(".mp3")){
                progressWebView.dismiss();
                progressWebView.cancel();
                blogDialog.setButton("Listen", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.parse(url), "audio/*");
                        view.getContext().startActivity(intent);

                    }
                });
                blogDialog.setButton2("Download", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        sdrUrl = url.toString();
                        new DownloadFile().execute();   


                    }   

                });
                blogDialog.show();

            }else{
                return super.shouldOverrideUrlLoading(view, url);
            }
            return true;
        }
    }

    //to handle the back button 
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event){
        if((keyCode == KeyEvent.KEYCODE_BACK) && sdrWebView.canGoBack()){
            sdrWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    public void onPause(){
        super.onPause();
    }

    /*create the pop up menu so you can reload*/
    @Override
    public boolean onCreateOptionsMenu(Menu menu){
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        switch (item.getItemId()){
        case R.id.refreshsetting: sdrWebView.loadUrl("http://www.stopdroprave.com");
        break;
        }
        return true;
    }

    private class DownloadFile extends AsyncTask<String, Integer, String>{
        @Override
        protected String doInBackground(String... url) {
            try {
                URL url2 = new URL(sdrUrl);
                HttpURLConnection c = (HttpURLConnection) url2.openConnection();
                c.setRequestMethod("GET");
                c.setDoOutput(true);
                c.connect();

                int lengthOfFile = c.getContentLength();

                String PATH = Environment.getExternalStorageDirectory()
                        + "/download/";
                Log.v("", "PATH: " + PATH);
                File file = new File(PATH);
                file.mkdirs();

                 String fileName = "testSDRtrack.mp3";

                File outputFile = new File(file, fileName);
                FileOutputStream fos = new FileOutputStream(outputFile);

                InputStream is = c.getInputStream();

                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ((len1 = is.read(buffer)) != -1) {
                    publishProgress((int)(len1*100/lengthOfFile));
                    fos.write(buffer, 0, len1);
                }
                fos.close();
                is.close();

                }catch (IOException e) {
                       e.printStackTrace();
                }


            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {

            super.onProgressUpdate(values);
        }



}
}

1 Ответ

1 голос
/ 28 июля 2011

Я, по сути, разделил URL-адрес и получил нужную часть, а затем сохранил ее вот так

Android - разделенная строка URL

...