2013-02-23 36 views
10

Tôi đang cố gắng thêm nút vào ứng dụng Android của mình, nơi nó phát một MP3 khi nút được nhấn. Tôi đã nhận được nó làm việc, nhưng không có cách nào để phát hành các đối tượng mediaPlayer - do đó nó tiếp tục chơi ngay cả sau khi tôi rời khỏi hoạt động. Nếu tôi khởi tạo đối tượng MediaPlayer bên ngoài phương thức react() của tôi (cái được gọi khi nhấn nút) nó khiến ứng dụng buộc phải đóng khi hoạt động được mở. Nhưng nếu tôi khởi tạo MediaPlayer trong phương thức react() thì tôi không thể sử dụng mplayer.release trong phương thức onQuit(). Tôi không thấy gì ở đây?Cách phát hành Android MediaPlayer

public void react(View view) { 
    MediaPlayer mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord); 
    mediaPlayer.start(); 
} 
protected void onStop(){ 
    mediaPlayer.release(); 
    mediaPlayer = null; 
} 

Không làm việc vì lý do rõ ràng và

MediaPlayer mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord); 
public void react(View view) { 
      mediaPlayer.start(); 
} 
protected void onStop(){ 
    mediaPlayer.release(); 
    mediaPlayer = null; 
} 

Nguyên nhân nó để buộc chặt chẽ.

Cập nhật: Đây là toàn bộ lớp java.

public class ToBeOrNot extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_to_be_or_not); 

     } 
MediaPlayer mediaPlayer; 

public void react(View view) { 
     mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord); 
     mediaPlayer.start(); 
} 
protected void onStop(){ 
    mediaPlayer.release(); 
    mediaPlayer = null; 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    //getMenuInflater().inflate(R.menu.activity_to_be_or_not, menu); 
    // Locate MenuItem with ShareActionProvider 
    return true; 
} 

} 

Tôi nghĩ điều này tương đối tự giải thích. Khi được gọi, nó cho thấy một số văn bản cộng với một nút mà khi khai thác bắt đầu một ghi âm chơi. Khi ai đó nhấn nút quay lại, nó sẽ quay trở lại hoạt động trước đó và dừng ghi âm. Cảm ơn bạn đã giúp tôi!

+0

Nếu câu hỏi khác của bạn được trả lời và bạn muốn hỏi câu hỏi mới, bạn nên mở một câu hỏi mới, không chỉ đơn giản là chỉnh sửa câu hỏi này. – Geobits

+0

Được rồi, tôi sẽ không muốn tạo quá nhiều câu hỏi. – dacelbot

+0

Đây là câu hỏi mới. http://stackoverflow.com/questions/15046888/android-mediaplayer-causing-force-close-onquit Nếu bạn cảm thấy muốn trả lời điều đó thật tuyệt, cảm ơn bạn. Hoặc ai đó có thể, hoặc tôi có thể tự mình trả lời câu trả lời. – dacelbot

Trả lời

14

Bạn không thể khởi tạo đối tượng mediaplayer bên ngoài tất cả các phương pháp. Nếu bạn làm như vậy, nó sẽ cố gắng sử dụng một ngữ cảnh chưa được tạo ra. Bạn cần phải khai báo nó như là một biến lớp (bên ngoài phương pháp này), và khởi tạo nó bên trong:

MediaPlayer mediaPlayer; 

public void react(View view) { 
    mediaPlayer = MediaPlayer.create(ToBeOrNot.this, R.raw.achord); 
    mediaPlayer.start(); 
} 

protected void onStop(){ 
    mediaPlayer.release(); 
    mediaPlayer = null; 
} 

Bên cạnh đó, tôi khuyên bạn nên đọc lên trên variable scope in Java.

+0

Ah, cảm ơn rất nhiều! Đó là một sai lầm thực sự ngu ngốc. Tôi nhận ra rằng phạm vi là những gì tôi đã gặp rắc rối với, nhưng bộ não của tôi đã không làm việc và tôi không thể nghĩ làm thế nào để sửa chữa nó. – dacelbot

+0

Vì vậy, tôi đã sao chép ví dụ của bạn và bây giờ nó chạy tốt nhưng khi tôi nhấn nút quay lại sau khi nhấn nút khởi động âm thanh, lực ứng dụng sẽ đóng lại. Có suy nghĩ gì không? – dacelbot

+0

Có rất nhiều vấn đề tiềm ẩn với nó. Tôi muốn đề nghị làm một câu hỏi khác, giải thích những gì bạn đang làm trong tất cả các phương pháp vòng đời (tạo, tiếp tục, tạm dừng, dừng, vv). Ngoài ra, hãy giải thích chính xác bạn muốn * nó làm gì. – Geobits

0

Điều này làm việc tốt cho tôi.

public class MainActivity extends AppCompatActivity { 

    MediaPlayer mediaPlayer; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mediaPlayer = MediaPlayer.create(this, R.raw.beep_warning); 

     final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox); 
     checkBox.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (checkBox.isChecked()) { 
        mediaPlayer.start(); 
        mediaPlayer.setLooping(true); 
       } 
       else{ 
        mediaPlayer.pause(); 
       } 
       } 


     }); 

    } 
    @Override 
    protected void onStop() { 
     super.onStop(); 
     mediaPlayer.release(); 
    } 
Các vấn đề liên quan