플래이 버튼을 누르면 음악이 재생되고, 중지를 누르면 음악이 꺼지는 것까지는 되었는데요,
그 화면을 벗어나기 위해 백키를 누르거나 홈키를 누르면 음악이 꺼지게 하고 싶습니다.
다른 화면을 넘어가거나, 백키를 눌러도 음악이 계속 나오더라구요.
(참고로 저는 이 소스를 책을 보고 겨우 작성했습니다. 그래서 답변을 주실 때, 소스까지 정확하게 알려주셔야 해요. 저는 정말 초보입니다.)
[ top.java ]_________________________________________________________________________
package com.pfo.pw;
import java.io.IOException;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.drawable.AnimationDrawable;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
public class top {
public Activity act;
public MediaPlayer mp;
public top() {
}
public top(Activity tmpact) {
act = tmpact;
}
public void init() {
// audio/////////
mp = MediaPlayer.create(act, R.raw.duegosong_epic);
try {
mp.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
Toast.makeText(act, e.getMessage(), Toast.LENGTH_SHORT).show();
}
ImageView playBtn = (ImageView) act.findViewById(R.id.play_btn1);
playBtn.setOnClickListener(new ImageView.OnClickListener() {
public void onClick(View v) {
audioControl();
}
});
ImageView equalBg = (ImageView) act.findViewById(R.id.equal_bg1);
equalBg.setOnClickListener(new ImageView.OnClickListener() {
public void onClick(View v) {
audioInfo();
}
}); // audio/////////
}
public void audioInfo() {
AlertDialog dialog = new AlertDialog.Builder(act).create();
dialog.setTitle(act.getString(R.string.audio_title1));
dialog.setIcon(act.getResources().getDrawable(R.drawable.logo_5));
dialog.setButton("확인", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
});
dialog.show();
}
public void audioControl() {
ImageView img = (ImageView) act.findViewById(R.id.equal_bg1);
final AnimationDrawable equalAnim = (AnimationDrawable) img.getBackground();
final ImageView playBtn = (ImageView) act.findViewById(R.id.play_btn1);
if (playBtn.getBackground().getLevel() == 0) {
playBtn.getBackground().setLevel(1);
mp.start();
equalAnim.start();
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer arg0) {
playBtn.getBackground().setLevel(0);
equalAnim.stop();
}
});
} else {
playBtn.getBackground().setLevel(0);
mp.pause();
equalAnim.stop();
}
}
public void backgroundStop() {
ImageView img = (ImageView) act.findViewById(R.id.equal_bg1);
AnimationDrawable equalAnim = (AnimationDrawable) img.getBackground();
ImageView playBtn = (ImageView) act.findViewById(R.id.play_btn1);
playBtn.getBackground().setLevel(0);
mp.pause();
equalAnim.stop();
}
}
[duego.java]_________________________________________________________________________
package com.pfo.pw;
import com.pfo.pw.R;
import com.pfo.pw.back;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
public class duego extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.duego);
top top = new top(this);
top.init();
ImageButton top_arrow_right = (ImageButton)findViewById(R.id.top_arrow_right);
Animation alphaAnim = AnimationUtils.loadAnimation(this, R.anim.alpha);
top_arrow_right.startAnimation(alphaAnim);
top_arrow_right.setOnClickListener(new ImageButton.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(duego.this, back.class);
startActivity(intent);
}
});
}
}
위에 알려주신 소스를
public void init() {} 안에 넣어봤는데요, 오류가 뜨면서
" The type of the expression must be an array type but it resolved to MediaPlayer "
라고 나오네요.. 어떻게 하면 좋을까요?
안드로이드의 activity 생명주기와 각 주기에서 호출되는 콜백함수들을 아셔야 할것 같아요
http://tigerwoods.tistory.com/30
초보라고 그냥 소스 만들어 주는거 붙여서 작동되는데 만족하지 마시고 원리를 이해해야 초보에서 벗어나겠죠?
b22n 님 감사합니다. 알려주신 글 잘 읽어보았습니다. 그런데 읽어도 잘 모르겠는데, 어쩌죠?
지금 소스 하나씩 봐가면서 하나씩 이해해가고 있어요... 그런데 이렇게 막힐 때마다 처음부터 읽어보고 하지만, 아직은 개념이 확실치 않아서 잘 모르겠습니다. 공부는 계속 하겠지만, 어디에 저 소스를 넣어야 할까요? 다른 곳에 넣어봐도 다 똑같은 오류가 생겨서요.
메인 엑티비티 즉, onCreate() 메소드가 있는 클레스 안에
public void onStop()
{
super.onStop();
mp.stop(); //<- 물론 직접 만드신 인스턴트를 불러오셔야 겠죠?
}//end onStop()
위와 같은 메소드를 넣어서 오버라이딩 해 주시면, 프로그램을 벗어났을 경우 음악이 자동으로 정지 됩니다.
답변해주신 여러분들께 감사드립니다. 그런데 제가 아직 기초가 없어서 잘 안되었던 관계로, 그냥 책에 나와있던 백화살표 그림을 클릭하면 음악이 종료되는 방법으로 했습니다. 저는 그 이미지말고도 스마트폰의 백키를 눌렀을 때 음악이 종료되게 하고 싶었는데, 지금은 너무 기초가 없어서 가르쳐주셔도 잘 못하겠네요.. ^^
public void init() {
mp = MediaPlayer.create(act, R.raw.duegosong_epic);
try {
mp.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
Toast.makeText(act, e.getMessage(), Toast.LENGTH_SHORT).show();
}
ImageView playBtn = (ImageView) act.findViewById(R.id.play_btn1);
playBtn.setOnClickListener(new ImageView.OnClickListener() {
public void onClick(View v) {
audioControl();
}
});
ImageView equalBg = (ImageView) act.findViewById(R.id.equal_bg1);
equalBg.setOnClickListener(new ImageView.OnClickListener() {
public void onClick(View v) {
audioInfo();
}
});
ImageButton top_arrow_left = (ImageButton) act
.findViewById(R.id.top_arrow_left);
top_arrow_left.setOnClickListener(new ImageButton.OnClickListener() { //이 부분을 삽입했습니다.
public void onClick(View v) {
backgroundStop();
act.onBackPressed();
}
}); //이 부분을 삽입했습니다.
}




ㅋㅋ.. ㅋ...
if (mp != null) {
for(int i=0;i<10;i++)
{
mp[i].release();
mp[i] = null;
}
}
어디다 넣을지는 잘 생각해보세요^^