2011-05-19 11 views
28
05-19 11:52:51.622: ERROR/MediaPlayer(1291): prepareAsync called in state 8 
05-19 11:52:51.622: WARN/System.err(1291): java.lang.IllegalStateException 
try { 
    mp = MediaPlayer.create(
      Main.this, 
      Uri.parse("http://codejanitor.us/good.mp3")); 
    mp.setOnPreparedListener(new OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 
    try { 
     mp.prepareAsync(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } 
} finally { 
    if (mp != null) { 
     mp.release(); 
     mp = null; 
    } 
} 

luân phiênIllegalStateException cho MediaPlayer.prepareAsync

Nếu tôi làm:

try { 
    mp = MediaPlayer.create(
      AmazonClipActivity.this, 
      Uri.parse("http://codejanitor.us/good.mp3")); 
    mp.setOnPreparedListener(new OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 
} finally { 
    if (mp != null) { 
     mp.release(); 
     mp = null; 
    } 
} 

tôi nhận được:

05-19 12:22:57.472: DEBUG/MediaPlayer(1635): Couldn't open file on client side, trying server side 
05-19 12:22:57.472: INFO/StagefrightPlayer(68): setDataSource('http://codejanitor.us/good.mp3') 
05-19 12:22:57.482: INFO/NuHTTPDataSource(68): connect to codejanitor.us:80/good.mp3 @0 
05-19 12:23:00.632: INFO/NuCachedSource2(68): ERROR_END_OF_STREAM 

Trả lời

71

mp = MediaPlayer.create(...); đã chuẩn bị MediaPlayer được trả về, vì vậy bạn không thể gọi lại prepare (hoặc các biến thể của nó) (và cũng không cần onPreparedListener).

+0

Tôi đã cập nhật câu hỏi của mình với một đường dẫn mã thay thế cũng không thành công, sẽ đánh giá cao đầu vào của bạn – hunterp

+0

Vui lòng tham khảo liên kết sau: http: // code .google.com/p/cyanogenmod/issues/detail? id = 1023 – MByD

+7

@BinyaminSharet liên kết của bạn bị hỏng. –

8

"PrepareAsync được gọi ở trạng thái 8" nghĩa là Mediaplayer đã được chuẩn bị.

bạn có đang gọi số mp.prepare(); trong mã của mình không?

+0

Tôi đã cập nhật câu hỏi của mình với đường dẫn mã thay thế cũng không thành công, sẽ đánh giá cao đầu vào của bạn – hunterp

5

câu hỏi được cập nhật của bạn:

  1. Kiểm tra xem bạn có quyền INTERNET tại của bạn AndroidManifest.xml
  2. Kiểm tra xem bạn đã bật một số kết nối dữ liệu, như bạn muốn dòng từ internet
  3. Ý anh là gì với "giải pháp này cũng không thành công"? Nó có ném một IllegalStateException không? Từ những gì tôi thấy, nó sẽ không làm gì cả, bởi vì bạn đăng ký OnPreparedListener của bạn sau khi đối tượng MediaPlayer đã tự chuẩn bị, khiến phương thức onPrepared() không bao giờ được gọi.

Một cách tiếp cận tốt hơn sẽ được viết:

MediaPlayer mp = new MediaPlayer(); 
mp.setDataSource("http://.../movie.mp4"); 
mp.setOnPreparedListener(this); 
mp.prepareAsync(); 
0

tôi sử dụng bên dưới mã để chơi các tập tin âm thanh cho http.

BackgroundSound mBackgroundSound = new BackgroundSound(); 

public void onSoundRequested(final Uri uri) { 
    mBackgroundSound = new BackgroundSound(); 
    mBackgroundSound.execute(new SoundModel(dicId, uri)); 
} 

public class BackgroundSound extends AsyncTask<SoundModel, Void, Void> { 
    MediaPlayer mediaPlayer; 

    @Override 
    protected Void doInBackground(SoundModel... params) { 
     SoundModel model = params[0]; 
     final Uri uri = model.getUri(); 

     if (uri == null || uri == Uri.EMPTY) return null; 
     if (mediaPlayer != null) mediaPlayer.stop(); 

     try { 
      mediaPlayer = MediaPlayer.create(VocabularyActivity.this, uri); 
      mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     } catch (Exception e) { 
      // do nothing. 
     } 
     if (mediaPlayer == null) return null; 

     mediaPlayer.setVolume(1.0f, 1.0f); 
     mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
       mediaPlayer.reset(); 
       mediaPlayer.release(); 
       mediaPlayer = null; 
      } 
     }); 
     mediaPlayer.start(); 
     return null; 
    } 
} 

Nó hiển thị warnimg W/MediaPlayer: Couldn't open https://something.com/test.mp3: java.io.FileNotFoundException: No content provider: https://something.com/test.mp3 nhưng hoạt động tốt.