mp3 플레이어 앱을 만들고 있습니다.
PlayMusicActivity.java 에서는 플레이어 액티비티 화면단 이구요.
PlayMusicService.java 에서는 음악을 재생하는 서비스 단 입니다.
액티비티 와 서비스 사이에 데이터 공유하는 방법은 브로드캐스트 리시버로 했습니다.
그래서 액티비티 와 서비스 양쪽 모두 브로드캐스트 리시버를 동적으로 만들었습니다.
문제는 액티비티에서 서비스를 생성한 후 바로 리시버 호출이 않되는것 같습니다.
그러니까... 플레이어를 실행시키자 마자 음악을 자동으로 플레이 하고 싶은데요.
다음 코드를 봐주세요.
PlayMusicActivity.java 입니다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_music);
registerReceiver(receiver, new IntentFilter("kr.co.seungmin.PLAY_TO_ACTIVITY"));
Intent service_intent = new Intent(this, PlayMusicService.class);
service_intent.putExtra("playSelectedList", playSelectedListParcel);
service_intent.putExtra("isSelected", isSelected);
startService(service_intent);
Intent pintent = new Intent("kr.co.seungmin.PLAY_TO_SERVICE");
pintent.putExtra("mode", "start");
sendBroadcast(pintent);
}
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String mode = intent.getStringExtra("mode");
if( mode != null ) {
if( mode.equals("start") ) {
int current_pos = intent.getIntExtra("current_pos", 0);
int duration = intent.getIntExtra("duration", 0);
progressBar.setMax(duration);
progressBar.setProgress(0);
runThread = true;
ProgressThread thread = new ProgressThread();
thread.start();
} else if( mode.equals("stop") ) {
runThread = false;
}
}
}
};
다음은 PlayMusicService.java 입니다.
public void onCreate() {
super.onCreate();
registerReceiver(receiver, new IntentFilter("kr.co.seungmin.PLAY_TO_SERVICE"));
mMusicPlayer = new MediaPlayer();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
playSelectedListParcel = intent.getParcelableExtra("playSelectedList");
boolean isSelected = intent.getBooleanExtra("isSelected", true);
current_pos = playSelectedListParcel.getPos();
if (mMusicPlayer.isPlaying() == true && isSelected == false) {
...
}
return super.onStartCommand(intent, flags, startId);
}
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String mode = intent.getStringExtra("mode");
if (mode != null) {
if (mode.equals("start")) {
try {
filePath = playSelectedListParcel.getMusicInfoParcels().get(current_pos).getPath();
mMusicPlayer.setDataSource(filePath);
mMusicPlayer.prepare();
mMusicPlayer.start();
Intent aIntent = new Intent("kr.co.seungmin.PLAY_TO_ACTIVITY");
aIntent.putExtra("mode", "start");
aIntent.putExtra("current_pos", current_pos); // to print album image
aIntent.putExtra("duration", mMusicPlayer.getDuration());
sendBroadcast(aIntent);
} catch (IOException e) {
e.printStackTrace();
}
} else if (mode.equals("stop")) {
}
}
}
};
@Override
public void onDestroy() {
super.onDestroy();
if (mMusicPlayer != null) {
mMusicPlayer.stop();
mMusicPlayer.release();
mMusicPlayer = null;
}
unregisterReceiver(receiver);
}
액티비티의 onCreate() 에서 서비스 (service_intent ) 를 생성하였고 곧바로 서비스의 리시버를 호출했는데
Intent pintent = new Intent("kr.co.seungmin.PLAY_TO_SERVICE");
pintent.putExtra("mode", "start");
sendBroadcast(pintent);
호출이 안됩니다. 어떻게 해야 하는지 모르겠습니다. 고수님들 도와주세요.