web-dev-qa-db-ja.com

Android MediaPlayer-曲の再生時にエラー(1、-4)

オーディオファイルのパスとファイル名を使用してそのURIを取得し、SDカードからmp3オーディオファイルを再生しようとしています。

SDカードに保存されているトラック名がSpinnerに入力されています。項目を選択すると、以下のコードが実行されます。

final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
OnItemSelectedListener listener = new OnItemSelectedListener(){
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            TextView tv = (TextView) selectedItemView;

            File file = new File(uri.getPath() + "/" + tv.getText().toString());
            Log.i(TAG, "-------------  PATH : " + file.getAbsolutePath());
            Uri uri = Uri.fromFile(file);
            MediaPlayer mP = new MediaPlayer();
            try {
                mP.setDataSource(context, uri);

                mP.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        // TODO Auto-generated method stub
                        mp.start();

                    }
                });

            } catch (IllegalArgumentException e) {
                  e.printStackTrace();
            } catch (IllegalStateException e) {
              e.printStackTrace();
            } catch (IOException e) {
              e.printStackTrace();
            }
            try {
                mP.prepare();
            } catch (IllegalStateException e) {
              e.printStackTrace();
            } catch (IOException e) {
             e.printStackTrace();
            }

        }
    };

次のエラーが発生します。

08-21 16:16:37.099: I/MusicFileActivity(3940): -------------  PATH : /external/audio/media/antazirouka
08-21 16:16:37.159: W/MediaPlayer(3940): info/warning (1, 26)
08-21 16:16:37.159: E/MediaPlayer(3940): error (1, -4)
08-21 16:16:37.159: W/System.err(3940): Java.io.IOException: Prepare failed.: status=0x1
08-21 16:16:37.169: W/System.err(3940):     at Android.media.MediaPlayer.prepare(Native Method)
08-21 16:16:37.169: W/System.err(3940):     at com.example.project.MusicFileActivity$1.onItemSelected(MusicFileActivity.Java:84)
08-21 16:16:37.169: W/System.err(3940):     at Android.widget.AdapterView.fireOnSelected(AdapterView.Java:871)
08-21 16:16:37.169: W/System.err(3940):     at Android.widget.AdapterView.access$200(AdapterView.Java:42)
08-21 16:16:37.169: W/System.err(3940):     at Android.widget.AdapterView$SelectionNotifier.run(AdapterView.Java:837)
08-21 16:16:37.169: W/System.err(3940):     at Android.os.Handler.handleCallback(Handler.Java:587)
08-21 16:16:37.169: W/System.err(3940):     at Android.os.Handler.dispatchMessage(Handler.Java:92)
08-21 16:16:37.169: W/System.err(3940):     at Android.os.Looper.loop(Looper.Java:123)
08-21 16:16:37.169: W/System.err(3940):     at Android.app.ActivityThread.main(ActivityThread.Java:3687)
08-21 16:16:37.169: W/System.err(3940):     at Java.lang.reflect.Method.invokeNative(Native Method)
08-21 16:16:37.169: W/System.err(3940):     at Java.lang.reflect.Method.invoke(Method.Java:507)
08-21 16:16:37.169: W/System.err(3940):     at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:867)
08-21 16:16:37.169: W/System.err(3940):     at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:625)
08-21 16:16:37.169: W/System.err(3940):     at dalvik.system.NativeStart.main(Native Method)

誰かがそれについて何か考えを持っていますか?前もって感謝します :)

8
Hanady

mP.prepare();を間違った行に配置したので、mP.setDataSource(context, uri);関数およびその前mp.start();

また、MediaPlayerのインスタンスをいくつか作成しようとしないでください。 1つ作成し、開始前に毎回reset()関数を使用します。

詳細については、 このリンク を参照してください。

12
TheLittleNaruto

AndroidManifest.xmlでこの権限がありますか?

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
1
tim.paetz

In.setDataSource(fileName)を設定したファイル名またはファイルへのパスを修正します。

または、間違った呼び出し.prepare()(MUST CALL .setDataSource() before .prepare())。回答@TheLittleNarutoを参照してください。

0
Fortran