안녕하십니까
MP3를 만들고 있는데 버그가 있어서 이렇게 질문드립니다.
A 는 MP3이미지와 노래정보를 리스트로 표현한 액티비티입니다.
B는 MP3 play,정지,이전, MP3 실질적인 컨트롤을 담당하는 액티비티입니다.
여기서 문제점이있습니다.
A에서 만약 무조건이라는 노래의 이미지를 클릭하면 인텐트로 값을 넘겨줘
B에서 무조건 노래를 실행하게됩니다.
이제부터 B에서 실행한 노래를 1.Music이라고 하겟습니다.
BACK를 누르면 B액티비티는 종료되고 A액티비티가 나옵니다. 물론 1.Music(노래)는 계속 나옵니다.
A에서 남자는 여자를 귀찮게해라는 이미지를 클릭하면 정상적인 MP3라면 1.Music있는 노래는 남자는 여자를 귀찮게해 라는 노래로 바뀌어야 합니다.
하지만 재가 만든 것은 1.Music 노래는 게속 실행되고 남자는 여자를 귀찮게 해라는 노래가 새로 생성되서 노래가 중복되는 현상입니다.
어떤사람은 노래 중복을 막을려면 private static MediaPlayer mPlayer; 로 선언하라고하셧는데 이렇게 선언해버리면
A에서 다른 이미지를 클릭하면 파일을 읽을수가 없다고 뜹니다.
또 어떤 사람은 플래그를 보라고 하셧는데
A->B 로 이동뒤 B에서 back하는 것이되면 B가 finish()가 되어 A가 남고 해당 미디어는 계속 실행하고 있는 상태입니다.
그래서 이 해당 미디어를 컨트롤하는 방법이 무엇인지 알려주면 좋겟습니다..
아무거냐냐님의 댓글은 감사하지만 이건 아닌거 같습니다.
재가 만든거 자체가 oncreate에서만 동작되도록만들었기때문에
MediaPlayer mPlayer = new MediaPlayer(); 이부분자체가 새로운 mp3를 만드는거랑 같다고 보고
if(mPlayer.isplaying())은 당연히 새로 만들었기때문에 if 검사는 그냥 통과 할것 같네요
M.Ali님의 댓글은 감사합니다
M.Ali님도 안드로이드 폰이 게신가요? 아니면 MP3 플레이어를 사용하고 게신가요?
MP3 플레이어에서 BACK 했다고 노래 안나오면 그 제품은 아무도 안사겟죠?
또는
<activity android:name="com.android.music.MediaPlaybackActivity"
android:theme="@android:style/Theme.NoTitleBar"
android:label="@string/mediaplaybacklabel"
android:taskAffinity=""
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
android:excludeFromRecents="true" >
싱글턴 패턴으로 미디어플레이어 매니져를 작성하여 각종 액티비티에서 미디어플레이어를 하나만 생성하도록 코드로 제한을 걸고
액티비티내에 인스턴스로 포함하시면 제어할 수 있습니다.




MediaPlayer mPlayer = new MediaPlayer();
// 다음과 같이 플레이중인지 체크해보시죠
if(mPlayer.isplaying()){
// mPlayer.stop();
// mPlayer = null;
else {
mp.create(~~~~~);
mp.start();
}