2010-08-20 29 views
14

Tôi đang gặp sự cố khi sử dụng đối tượng MediaPlayer và không có nhiều thành công. Nếu tôi thêm một tài sản âm thanh vào thư mục thô của tôi và gọi nó bằng cách sử dụng giá trị int trong R, nó hoạt động tốt. Nhưng tôi muốn có thể kéo mọi thứ ra khỏi url.MediaPlayer.setDataSource() và chuẩn bị() không hoạt động - android

Theo tất cả tài liệu tôi đã đọc setDataSource() nên chấp nhận tham số chuỗi có url đến tệp.

Tôi tiếp tục nhận ngoại lệ IO trên câu lệnh Prepare(). Tôi thậm chí đã cố gắng sao chép các tập tin tại địa phương và vẫn không có con xúc xắc.

Bất kỳ ai có ý tưởng nào?

MediaPlayer mp = new MediaPlayer(); 
try { 
     mp.setDataSource("http://www.urltofile.com/file.mp3"); 
     mp.prepare(); 
     mp.start(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

Trả lời

20

Hãy thử MediaPlayer.create(), bạn cũng có thể muốn bắt đầu chỉ sau khi người chơi thực sự sẵn sàng, ví dụ:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    MediaPlayer player = MediaPlayer.create(this, Uri.parse("http://www.urltofile.com/file.mp3")); 
    player.setOnPreparedListener(new OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 
} 
+3

Hoạt động tốt với các URL bên ngoài (ví dụ: "http://google.com/") nhưng ném ngoại lệ khi thử nội dung cục bộ (ví dụ: "tệp: //android_asset/sound.mp3") :( – richtaur

+1

@richtaur Điều gì làm cho bạn sử dụng tài sản android thay vì tài nguyên thông thường? MediaPlaye.create (bối cảnh bối cảnh, int resid) sẽ làm việc tuyệt vời cho các tập tin phương tiện truyền thông nội bộ ứng dụng –

+0

Chỉ cần làm cho công cụ của tôi có tổ chức hơn :) Tài nguyên thư mục là đủ tốt. – richtaur

12

Đối với suối, bạn nên gọi prepareAsync(), mà trả về ngay lập tức, chứ không phải hơn là chặn cho đến khi đủ dữ liệu được lưu vào bộ đệm.

Các vấn đề liên quan