2013-12-13 18 views
11

Tôi đang tạo một ứng dụng âm thanh android mới. Tôi đã thực hiện một nút có thể nhấp để phát âm thanh khi tôi nhấp vào nó. Nhưng tôi cũng muốn nó ngừng phát âm thanh khi tôi nhấp lần thứ hai. Đó là một phần hoạt động tốt bây giờ đây là vấn đề, khi tôi bấm một lần nữa vào nút để chơi âm thanh một lần nữa, nó không chơi nó, Media player là hoàn toàn dừng lại. Tôi đã tìm kiếm trên diễn đàn nhưng tôi dường như không thể tìm thấy câu trả lời có thể giúp tôi. Đây là hoạt động của tôi:Media Player bắt đầu dừng bắt đầu

MediaPlayer mpButtonClick1; 
MediaPlayer mpButtonClick2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.prvi); 

    final MediaPlayer mpButtonClick1 = MediaPlayer.create(this, R.raw.spalshm); 
    final MediaPlayer mpButtonClick2 = MediaPlayer.create(this, R.raw.splashs); 


    Button dugme = (Button) findViewById(R.id.dugme); 
    dugme.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (mpButtonClick1.isPlaying()) { 
       mpButtonClick1.stop(); 
       mpButtonClick1.reset(); 

      } 
      else {    
       mpButtonClick1.start(); 

      } 


     } 

    }); 

Khi tôi cố gắng viết mpButtonClick1.prepare(); Tôi nhận được lỗi Unhandled Exception Loại IOE ngoại lệ

Trả lời

3

Thay đổi lớp học của bạn với mã dưới đây:

loại bỏ reset();.

init tốt tất cả các thành phần:

MediaPlayer mpButtonClick1; 
MediaPlayer mpButtonClick2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.prvi); 

    mpButtonClick1 = MediaPlayer.create(this, R.raw.spalshm); 
    mpButtonClick2 = MediaPlayer.create(this, R.raw.splashs); 


    Button dugme = (Button) findViewById(R.id.dugme); 
    dugme.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (mpButtonClick1.isPlaying()) { 
       mpButtonClick1.stop(); 
      } 
      else {    
       mpButtonClick1.start(); 
      } 
     } 

    }); 
+0

Khi tôi thử điều này, tôi nhận được "Thật không may Splashzor đã dừng lại. Lỗi –

+0

Đăng logcat của bạn. –

+0

http://prntscr.com/2atb96 đây là con mèo đăng nhập. Tôi không chắc chắn cách đăng nó vì vậy tôi đã chụp ảnh màn hình –

6

Hãy thử điều này: Bạn chỉ nên sử dụng một MediaPlayer đối tượng

public class PlayaudioActivity extends Activity { 

    private MediaPlayer mp; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button b = (Button) findViewById(R.id.button1); 
    Button b2 = (Button) findViewById(R.id.button2); 
    final TextView t = (TextView) findViewById(R.id.textView1); 

    b.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
     stopPlaying(); 
     mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.far); 
     mp.start(); 
     } 

    }); 

    b2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
     stopPlaying(); 
     mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.beet); 
     mp.start(); 
     } 
    }); 
    } 

    private void stopPlaying() { 
     if (mp != null) { 
      mp.stop(); 
      mp.release(); 
      mp = null; 
     } 
    } 
} 
+1

tái instantiating người chơi mỗi lần là những gì làm việc cho tôi. Nó đơn giản và không có chi phí đáng chú ý .. cảm ơn! – gnB

0

Bạn đang gọi điện thoại mpButtonClick1.reset() sau khi mpButtonClick1.stop() - không làm được điều đó:

if (mpButtonClick1.isPlaying()) { 
    mpButtonClick1.stop(); 
    mpButtonClick1.reset(); //<--------- calling reset(), remove this line 
} 

Các tài liệu cho reset() nói :

Đặt lại MediaPlayer về trạng thái chưa được khởi tạo. Sau khi gọi phương thức này, bạn sẽ phải khởi tạo lại nó bằng cách thiết lập nguồn dữ liệu và gọi chuẩn bị().

Xóa mpButtonClick1.reset() và nó sẽ hoạt động.

Hãy nhớ rằng MediaPlayer hoạt động như một máy trạng thái, có nghĩa là nếu bạn gọi các phương thức theo thứ tự sai, bạn sẽ gặp sự cố. Vui lòng đọc về MediaPlayer herehere.

8

Hãy thử sử dụng pause thay vì stop.

Lý do: nếu bạn tạm dừng MediaPlayer, thì bạn có thể tiếp tục lại sau. Tuy nhiên, nếu bạn sử dụng stop, hầu như mọi phương pháp khác sẽ không hoạt động và bạn sẽ phải chuẩn bị lại MediaPlayer (hoặc tạo một phương thức mới). Thông tin

enter image description here

thêm: herehere

PS: đừng quên để giải phóng bộ nhớ khi bạn hoàn thành bằng cách sử dụng các nguồn lực.

+1

Câu trả lời rõ ràng, điều này nên ở trên cùng. – Zub

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