【问题标题】:Write and play media from phone memory using Android media player使用 Android 媒体播放器从手机内存写入和播放媒体
【发布时间】:2012-08-03 01:43:14
【问题描述】:

我正在尝试获取一个 mp3 文件并将其保存在手机内存而不是 SD 卡中,然后立即使用媒体播放器播放。当我之前用它在 SD 卡上做同样的事情时,这段代码运行良好,所以我保存和读取 mp3 的位置似乎有一些错误。

这是我的代码:

try {

            MediaPlayer player = new MediaPlayer();
            URI uri = null;
            try {
                uri = new URI(
                        "http://translate.google.com/translate_tts?tl="
                                + oLanguage + "&q=" + text);
            } catch (URISyntaxException e) {
                e.printStackTrace();
            }

            String FileName = "Audio2.mp3";
            URL u = new URL(uri.toASCIIString());
            HttpURLConnection c = (HttpURLConnection) u.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();

//          FileOutputStream f = new FileOutputStream(new File(
//                  Environment.getExternalStorageDirectory()
//                          + "/download/" + FileName));

            FileOutputStream f = openFileOutput(FileName, MODE_PRIVATE);                
            InputStream in = c.getInputStream();
            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ((len1 = in.read(buffer)) > 0) {
                f.write(buffer, 0, len1);
            }
            f.close();

//          player.setDataSource(Environment.getExternalStorageDirectory()
//                      + "/download/" + FileName);

            player.setDataSource("/data/data/com.comm/files/" + FileName);              
            player.prepare();
            player.start()

Logcat:

        07-30 12:23:47.319: W/MediaPlayer(22426): info/warning (1, 26)
    07-30 12:23:47.319: E/MediaPlayer(22426): error (1, -4)
    07-30 12:23:47.319: W/System.err(22426): java.io.IOException: Prepare failed.: status=0x1
    07-30 12:23:47.329: W/System.err(22426):    at android.media.MediaPlayer.prepare(Native Method)
    07-30 12:23:47.329: W/System.err(22426):    at com.comm.Connect.Text(Connect.java:396)
    07-30 12:23:47.329: W/System.err(22426):    at com.comm.Connect$7.onClick(Connect.java:233)
    07-30 12:23:47.329: W/System.err(22426):    at android.view.View.performClick(View.java:2485)
    07-30 12:23:47.329: W/System.err(22426):    at android.view.View$PerformClick.run(View.java:9080)
    07-30 12:23:47.329: W/System.err(22426):    at android.os.Handler.handleCallback(Handler.java:587)
    07-30 12:23:47.329: W/System.err(22426):    at android.os.Handler.dispatchMessage(Handler.java:92)
    07-30 12:23:47.329: W/System.err(22426):    at android.os.Looper.loop(Looper.java:130)
    07-30 12:23:47.329: W/System.err(22426):    at android.app.ActivityThread.main(ActivityThread.java:3687)
    07-30 12:23:47.329: W/System.err(22426):    at java.lang.reflect.Method.invokeNative(Native Method)
    07-30 12:23:47.329: W/System.err(22426):    at java.lang.reflect.Method.invoke(Method.java:507)
    07-30 12:23:47.329: W/System.err(22426):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    07-30 12:23:47.329: W/System.err(22426):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    07-30 12:23:47.329: W/System.err(22426):    at dalvik.system.NativeStart.main(Native Method)

最后我是否需要指定允许我保存到手机内存的权限?

【问题讨论】:

    标签: java android mp3 android-mediaplayer file-transfer


    【解决方案1】:

    几件事:

    1. 外接点是什么样的?确保你在做 一些有用的东西,例如捕获异常并吐出 堆栈跟踪,这将更加有用,应该给你更多 描述性错误
    2. 如果您尝试将任何内容写入磁盘,请确保您有 android.permission.WRITE_EXTERNAL_STORAGE 在您的 manifest 文件中

    尝试为我们提供堆栈跟踪,这将有助于我们帮助

    【讨论】:

    • 我已经有权限了。我已经更新了我的问题以显示 logcat 的输出
    【解决方案2】:

    在做了一些研究之后似乎我需要使用我发现我需要使用输入流,下面的代码解决了这个问题

            FileOutputStream f = null;
                try {
                    f = openFileOutput(FileName, MODE_PRIVATE);
                } catch (Exception e) {
                    e.printStackTrace();
                }
    
                InputStream in = c.getInputStream();
                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ((len1 = in.read(buffer)) > 0) {
                    f.write(buffer, 0, len1);
                }
                f.close();
    
                player = new MediaPlayer();
                FileInputStream fis = new FileInputStream("/data/data/com.comm/files/"+ FileName);
                player.reset();
                player.setDataSource(fis.getFD());
                player.prepare();
                player.start();
                fis.close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多