Запись и воспроизведение мультимедиа из памяти телефона с помощью медиаплеера Android

Я пытаюсь получить 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()

Логкат:

        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)

И, наконец, нужно ли указывать какие-либо разрешения, чтобы разрешить сохранение в память телефона?


person Amanni    schedule 30.07.2012    source источник


Ответы (2)


Пара вещей:

  1. Как выглядит внешний улов? Убедитесь, что вы делаете что-то полезное, например, перехватываете исключение и выплевываете трассировку стека, это принесет гораздо больше пользы и должно дать вам более описательную ошибку.
  2. Если вы пытаетесь записать что-либо на диск, убедитесь, что у вас есть android.permission.WRITE_EXTERNAL_STORAGE в вашем файл манифеста

Попробуйте предоставить нам трассировку стека, которая поможет нам помочь вам.

person Jimmy    schedule 30.07.2012
comment
У меня уже есть разрешение. Я обновил свой вопрос, чтобы показать вывод logcat - person Amanni; 30.07.2012

После проведения некоторых исследований кажется, что мне нужно было использовать, я обнаружил, что мне нужно использовать входной поток, код ниже решил проблему

        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();
person Amanni    schedule 02.08.2012