2013-08-21 16 views
6

私はsdカードからmp3オーディオファイルを再生しようとしています。Android MediaPlayer - 曲を再生するときにエラー(1、-4)が発生する

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

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) 

誰もがそれについてどんな考えを持っていますか? ありがとうございます。

+0

はアクセス可能なメディアファイルで、互換性のあるフォーマット(mp3など)ですか? – rydgaze

+0

はい、アクセス可能でmp3ファイルです。 – Hanady

+0

@Hanady私は音楽プレーヤーを自分で開発しています。あなたのイコライザーは?私はインターネットからそれをフェッチした後、私はバックグラウンドでアーティストのイメージを表示する方法をコードを共有することができます...... –

答えて

11

デュードあなたがmP.setDataSource(context, uri);機能 後にそれを呼び出す必要が 間違ったラインでmP.prepare();を配置し、mp.start();

前にもMediaPlayerのの複数のインスタンスを作成しようとしていません。起動前に毎回リセット()を使用してください。

詳細については、this linkを参照してください。

1

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

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

いいえ、私はしないが、私はそれを追加し、何も変更されていません – Hanady

0

.setDataSource(fileName)に設定されたファイル名またはパスが正しくありません。

または間違った電話.prepare()(必ず.setDataSource() before .prepare()と呼びなさい)。@TheLittleNarutoにお問い合わせください。

関連する問題