当前位置: 首页 > 知识库问答 >
问题:

Android下载mp3文件并播放

柴良哲
2023-03-14

我正试图从Dropbox下载一些音频文件供用户下次在没有互联网的情况下使用,因此代码实际上下载了该文件,但我在播放该音频时遇到了问题,我不知道是否需要解析下载的文件或其他什么,希望您能提供帮助

下载文件并播放它类,它在执行后播放它,或者至少它尝试

class DownloadFileFromURL extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread Show Progress Bar Dialog
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            showDialog(progress_bar_type);
        }

        /**
         * Downloading file in background thread
         */
        @Override
        protected String doInBackground(String... f_url) {
            int count;
            try {
                URL url = new URL(f_url[0]);
                URLConnection conection = url.openConnection();
                conection.connect();

                // this will be useful so that you can show a tipical 0-100%
                // progress bar
                int lenghtOfFile = conection.getContentLength();

                // download the file
                InputStream input = new BufferedInputStream(url.openStream(),
                        8192);

                // Output stream
                OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory().getPath()+"/workout.mp3");

                byte data[] = new byte[1024];

                long total = 0;

                while ((count = input.read(data)) != -1) {
                    total += count;
                    // publishing the progress....
                    // After this onProgressUpdate will be called
                    publishProgress("" + (int) ((total * 100) / lenghtOfFile));

                    // writing data to file
                    output.write(data, 0, count);
                }

                // flushing output
                output.flush();

                // closing streams
                output.close();
                input.close();

            } catch (Exception e) {
                Log.e("Error: ", e.getMessage());
            }
            return null;
        }
        /**
         * Updating progress bar
         */
        protected void onProgressUpdate(String... progress) {
            // setting progress percentage
            pDialog.setProgress(Integer.parseInt(progress[0]));
        }
        /**
         * After completing background task Dismiss the progress dialog
         **/
        @Override
        protected void onPostExecute(String file_url) {
            // dismiss the dialog after the file was downloaded
            dismissDialog(progress_bar_type);
            Uri u = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/workout.mp3");

            MediaPlayer mediaPlayer = new MediaPlayer();
            try {
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mediaPlayer.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/workout.mp3");
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                }
            });
        }
    }

我在日志上发现了这个错误

05-31 11:46:11.605 4638-4650/com.example.project.calisthenic E/MediaPlayer: error (1, -2147483648)

问题是试图播放下载的文件,即使尝试播放它与Android本地播放器它说"该播放器不支持这种类型的音频文件",所以我不知道我是否下载文件在错误的方式试图用错误的方式玩。

我会检查,文件大小是10kb,下载后是400B,所以下载肯定有问题

共有1个答案

邵星光
2023-03-14

我不知道问题是否来自它,但您应该在调用准备函数之前设置准备监听器。

 类似资料:
  • 问题内容: 我正在编写一个应用程序,可以在其中输入来自Web的mp3文件的URL,当我单击下载时,该应用程序会将其下载到应用程序中。有人能帮我吗 ?我是ios开发的新手。我正在尝试学习Swift 问题答案: Xcode 8•Swift 3

  • 我在服务器上保存了许多mp3文件,以便在Android应用程序中接收它们。我正在一个接一个地播放mp3文件。我的问题是,我想在播放当前的mp3文件时已经缓冲下一个mp3文件。 我尝试它已经下载下一个MP3文件在缓存中,同时播放第一个。但问题是,当第一个mp3文件播放完毕时,第二个mp3文件可能无法完全下载(这很容易发生在2g连接上)。然后播放器将初始化下载的mp3文件的一部分,播放器将只播放初始化

  • 我们可以使用公共可下载的url来达到上述目的吗 谢谢

  • 作为一名新的程序员,我一直在做大量的尝试和错误,并坚持使用那些有效的发现,但我目前使用的方法并不适用于所有浏览器。 我们的PHP代码。 HTML下载按钮。 你可以看到我使用的是Html5和上面的Javascript方法,这意味着它只支持FireFox和GoogleChrome。 如何允许所有浏览器上的用户点击我们的按钮下载文件?

  • 我遵循了本教程:http://what-when-how.com/javafx-2/playing-audio-using-the-media-classes-javafx-2-part-1/ 我有相应的资源文件夹在相应的目录中。类文件,但我仍然不能播放音频。mp3文件与教程中的不同,但我也有一个. wav等效文件,发现JavaFX可以开箱播放*. wav文件,但不能播放mp3文件。怎么回事啊?

  • 标记为“good”的文件可以正确播放,而标记为“bad”的文件则不能。两个文件在同一个目录中;两个文件都使用音乐播放器播放;并且这两个文件都可以在Windows7机器上使用Python3.4和pygame。