2012-03-07 15 views
45

Tôi cần có thời lượng của tệp âm thanh cho một loạt thông báo bằng giọng nói cần phát từ một ứng dụng. Tôi đã thêm các tập tin âm thanh như là nguồn lực và họ chơi tốt. Mã mẫu bên dưới thực sự hoạt động hoàn hảo cho mục đích dự định của nó: nó trả về thời lượng của các tệp âm thanh.Android: mediaplayer biến mất với các sự kiện chưa được xử lý

Đây là mã:

float getDurationOfAudioResource(LocationEnum loc, Context context){ 
    float duration = 0; 
    try { 
     MediaPlayer mp; 
     mp = MediaPlayer.create(context, getAudioResource(loc)); 
     duration = mp.getDuration(); 
     mp.release(); 
     mp = null; 
    } 
    catch (IllegalStateException e) {e.printStackTrace(); logError(25, "TestDescItem:Fault::Could not open mediaplayer object with audio resource.");} 
    return duration; 
} 

Đây là điều lạ. Mã này được gọi trong một hoạt động chính chuẩn bị tập hợp các hướng dẫn âm thanh cho một thử nghiệm nhất định. Không có lỗi trong hoạt động này. Nhưng ngay sau khi hoạt động thứ hai được gọi, tôi nhận được một chuỗi dài các lỗi trên logcat.

03-07 13:23:43.820: I/ActionLogger(21435): GenTest_Info_Test #0 successfully created. 
03-07 13:23:43.830: I/ActionLogger(21435): GenTest_Info_Test #1 successfully created. 
03-07 13:23:43.840: I/ActionLogger(21435): GenTest_Info_Test #2 successfully created. 
03-07 13:23:43.850: I/ActionLogger(21435): GenTest_Info_Test #3 successfully created. 
<snip> 
03-07 13:23:43.910: I/ActionLogger(21435): GenTest_Info_all tests successfully created. 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.270: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
<snip> 

Tôi đã từng bước lên đến cuối hoạt động chính (không có lỗi) và từ dòng đầu tiên của hoạt động thứ hai. Các lỗi chắc chắn được ném giữa các hoạt động.
Ngoài ra, nếu tôi nhận xét tám dòng của khối thử (do đó chỉ trả lại bằng không) các lỗi logcat sẽ tránh được. Khi tôi khôi phục lại tám dòng, các lỗi trở lại. Tôi đã đào qua tài liệu và tìm kiếm trên web và tôi tin rằng tôi đang xây dựng, phát hành và phá hủy đối tượng mediaplayer một cách chính xác, vì vậy tôi không thể thấy tại sao tôi gặp lỗi. Điều đó nói rằng, tôi phải làm điều gì đó sai trái. Bất kỳ ý tưởng?

Cảm ơn,

Kevin

Trả lời

160

Chỉ cần đặt mp.reset(); trước mp.release();.

+0

Tuyệt vời. Điều đó cố định nó! Cảm ơn bạn! – Hephaestus

+9

Điều đó làm gì? – Casebash

+4

phát hành khiến videoview của tôi gặp sự cố với IllegalStateException sau đó ... – Ron

34

Các thánh năm:

if(mp!=null) { 
     if(mp.isPlaying()) 
      mp.stop(); 
     mp.reset(); 
     mp.release(); 
     mp=null; 
    } 
+2

Làm việc như một sự quyến rũ – locrizak

+0

Đối với bất kỳ ai sử dụng VideoView, điều này tương tự như những gì nó làm trong 'stopPlayback();' – vvolkgang

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