2010/11/20 11:31 http://blog.naver.com/jeggange/90100530068 출처: |
Service
사용자와 상호작용 없이 내부적으로 실행되는 프로세스
- UI없이 오랫동안 살아있으면서 실행되는 코드들
- media player activity는 Context.startService()를 이용하여 백그라운드로 음악이 계속 재생되는 서비스 구동
- 서비스에 접근할 때, 서비스에 의해 나타난 인터페이스를 통해 서비스와 통신할 수 있다.
이미지 버튼과 음악 재생에 사용할 파일을 미리 준비해 둔다
미디어 파일은 /res/raw 폴더 생성
xml 버튼에 onClick 이벤트 달기
android:id="@+id/btnStop"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:onClick="btnProcess" />
main.xml
http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="음악 즐기기" />
android:id="@+id/btnStart"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/pic"
android:layout_marginTop="20dp"
android:onClick="btnProcess" />
android:id="@+id/btnStop"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="서비스 중지"
android:layout_marginTop="10dp"
android:onClick="btnProcess" />
android:id="@+id/btnExit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="어플 종료"
android:layout_marginTop="10dp"
android:onClick="btnProcess" />
Manifest.xml
MainApp.java
package aa.serviceEx;
import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.widget.*;
public class MainApp extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void btnProcess(View v) {
Toast.makeText(this, "success", 2000).show();
}
}
버튼 테스트를 위해 토스트를 달았다.
세가지 버튼을 누르게 되면 모두 같은 프로세스를 호출하기 때문에
같은 success 메시지가 나온다.
음악 재생 코드 추가
MainApp.java
package aa.serviceEx;
import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;
public class MainApp extends Activity implements OnClickListener {
/** Called when the activity is first created. */
ImageButton btnStart;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnStart = (ImageButton)findViewById(R.id.btnStart);
Button btnStop = (Button)findViewById(R.id.btnStop);
Button btnExit = (Button)findViewById(R.id.btnExit);
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
btnExit.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.btnStart) {
startService(new Intent("aa.bb.cc.mbc"));
btnStart.setEnabled(false);
}
else if(v.getId() == R.id.btnStop) {
stopService(new Intent("aa.bb.cc.mbc"));
btnStart.setEnabled(true);
}
else if(v.getId() == R.id.btnExit) {
stopService(new Intent("aa.bb.cc.mbc"));
btnStart.setEnabled(true);
finish();
}
}
}
음악이 재생중인 상태이며,
백그라운드로 돌렸기 때문에 멀티태스킹이 가능하다.
알림 표시바 사용하기
- 시간이 나온 제일 윗 부분 드래그 해서 나오는 부분 Notification
MainApp.java에서 onclick 메소드 수정
@Override
public void onClick(View v) {
// 알림 표시바 사용
NotificationManager nm =
(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
if(v.getId() == R.id.btnStart) {
startService(new Intent("aa.bb.cc.mbc"));
btnStart.setEnabled(false);
// Notification 처리
Notification notification =
new Notification(R.drawable.noti, "최신음악", System.currentTimeMillis());
Intent intent = new Intent(this, MainApp.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
notification.setLatestEventInfo(this, "노래 서비스", "점심은 맛있게", pendingIntent);
nm.notify(0, notification); // 상태표시바에 등장
}else if(v.getId() == R.id.btnStop) {
stopService(new Intent("aa.bb.cc.mbc"));
btnStart.setEnabled(true);
nm.cancel(0); // 상태 표시바에서 해제
}else if(v.getId() == R.id.btnExit) {
stopService(new Intent("aa.bb.cc.mbc"));
btnStart.setEnabled(true);
nm.cancel(0);
finish();
}
MpPlayer.java
package aa.serviceEx;
import android.app.*;
import android.content.*;
import android.media.*;
import android.os.*;
public class MpPlayer extends Service {
MediaPlayer mp;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
mp = MediaPlayer.create(this, R.raw.man);
mp.start();
}
@Override
public void onDestroy() {
super.onDestroy();
mp.stop();
mp.release(); // 자원 반납
}
}
'Android > Tip&Tech' 카테고리의 다른 글
MediaPlayer 순환표 (0) | 2010.12.03 |
---|---|
[안드로이드]롤오버 이미지 만들기 (0) | 2010.12.03 |
[펌]mediaplayer로 mp3돌리는 팁 (0) | 2010.12.03 |
[펌]안드로이드 개발 팁 및 소스 링크 (0) | 2010.12.02 |
Handling Screen On or Off intent (0) | 2010.12.02 |