Home » Android -7. 이벤트 처리 및 알림(Notification)

Android -7. 이벤트 처리 및 알림(Notification)

7.1. onClick 이벤트

  • 말 그대로 어떠한 것을 클릭했을 때 일어나는 이벤트이다.(ex. 버튼)

<step5/onClickEventSample>
[php]
eventSampleButton = (Button) findViewById(R.id.eventSampleButton); (1)
// 버튼이 눌려질때 이벤트
eventSampleButton.setOnClickListener(new View.OnClickListener() { (2)
@Override
public void onClick(View v) { (3)
// 토스트 메세지
ToastUtil.show(OnClickEventSample.this, "버튼을 눌렀습니다."); (4)
}
});
[/php]

번호 설명
(1) xml에 정의 된 id값을 통해 정보를 가져와 button 객체 생성
(2) onClick 리스너 등록
(3) 버튼이 눌려졌을 때 실행 되는 메소드 구현
(4) 버튼이 눌려지면 Toast 메시지가 실행

7.2. onKeyDown 이벤트

  • 휴대폰의 어떤 키가 눌려졌을 때 발생하는 이벤트(ex. 볼륨 업 / 다운)

<step5/onKeyDownEventSample>
[php]
// 특정 키가 눌려졌을 때 작동하는 메소드
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) { (1)
// 볼륨업 키를 눌렀을 때
if(keyCode == KeyEvent.KEYCODE_VOLUME_UP) { (2)
ToastUtil.show(OnKeyDownEventSample.this, "볼륨을 올렸습니다.");
} else if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { // 볼륨 다운 키를 눌렀을 때
ToastUtil.show(OnKeyDownEventSample.this, "볼륨을 내렸습니다.");
}
return super.onKeyDown(keyCode, event);
}
[/php]

번호 설명
(1) 키가 눌려졌을 때 실행 되는 메소드 구현
(2) 인자로 받은 keyCode가 볼륨업 버튼인지 판단 후 맞다면 토스트 메시지 실행

7.3. onKeyUp 이벤트

  • 특정키가 눌렸다가 떼졌을 때 발생하는 이벤트.

<step5/onKeyUpEventSample>
[php]
// 특정 키가 눌려졌을 때 작동하는 메소드
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) { (1)
// back 키를 눌렀을 때
if(keyCode == KeyEvent.KEYCODE_BACK) { (2)
ToastUtil.show(OnKeyUpEventSample.this, "back 버튼을 눌렀습니다.");
return false;
}
return super.onKeyUp(keyCode, event);
}
[/php]

번호 설명
(1) 키가 눌려졌다가 떼어졌을때 실행 되는 메소드 구현
(2) 인자로 받은 keyCode가 back키일 경우 Activity가 꺼지지 않도록 처리

7.5. onBackPressed 이벤트

<step5/onBackPressedEventSample>
[php]
// back 키가 눌려졌을 때 작동하는 메소드
@Override
public void onBackPressed() { (1)
ToastUtil.show(OnBackPressedEventSample.this, "back 버튼을 눌렀습니다."); (2)
//super.onBackPressed();
}
[/php]

번호 설명
(1) Back 키를 눌렀을 때 실행 되는 메소드 구현
(2) Toast 메시지 출력 후 Activity가 꺼지지 않도록 처리

7.6. onTouch 이벤트

  • 화면을 터치 했을 때 발생하는 이벤트로, 단순한 터치 이외에도 터치한 채 움직였을 경우 등도 처리 가능하다.

<step5/onTouchEventSample>
[php]
@Override
public boolean onTouchEvent(MotionEvent event) { (1)
// 화면의 x, y 좌표값을 가져온다
x = event.getX(); (2)
y = event.getX(); (3)

// 터치한채 움직일 때 이벤트
if (event.getAction() == MotionEvent.ACTION_MOVE) { (4)
Logger.i("touch move");
touchEventSampleTextView.setText("move\nx : " + x + "\ny : " + y ); (5)
} else if(event.getAction() == MotionEvent.ACTION_DOWN) { //터치만 했을 때 이벤트 (6)
Logger.i("touch down");
touchEventSampleTextView.setText("down\nx : " + x + "\ny : " + y ); (7)
}
return super.onTouchEvent(event);
}
[/php]

번호 설명
(1) 화면을 터치했을 때 실행되는 메소드
(2) 터치한 x좌표 값을 가져온다.
(3) 터치한 y좌표 값을 가져온다.
(4) 터치한 채 움직였을 때
(5) x, y 좌표를 화면에 표시
(6) 터치만 했을 때
(7) x, y 좌표를 화면에 표시

7.7. 알림(Notification)

  • 말 그대로 어떠한 것을 알릴 때 사용하는 것으로, 단말의 상단부분을 드래그 하여 내렸을 때 나오는 부분에 표시가 되며, 알림을 눌렀을 때 지정된 처리가 가능하다.

<퍼미션 등록>

<AndroidManifest.xml>
[php]
<uses-permission android:name="android.permission.VIBRATE" />
[/php]

<step5/NotificationSample>
[php]
// notification manager 객체 가져오기
notiManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); (1)
// 알림을 눌렀을 때 이동할 페이지
Intent intent = new Intent(NotificationSample.this, NotificationMessage.class); (2)
// pendingIntent는 다른 컴포넌트가 intent를 사용할 수 있도록 함
PendingIntent pIntent =
PendingIntent.getActivity(NotificationSample.this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT); (3)

String ticker = tickerText.getText().toString();
String title = panelTitle.getText().toString();
String msg = panelMsg.getText().toString();

// notification에 들어갈 정보 설정 및 보내기
// 젤리빈 이상일 경우
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { (4)
Notification.Builder noti = new Notification.Builder(NotificationSample.this); (5)
noti.setTicker(ticker); (6)
noti.setContentTitle(title); (7)
noti.setContentText(msg); (8)
noti.setSmallIcon(android.R.drawable.ic_input_add); (9)
noti.setWhen(System.currentTimeMillis()); (10)
noti.setNumber(1234); (11)
noti.setContentIntent(pIntent); (12)
noti.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 }); (13)
Notification notification = noti.build(); (14)
notiManager.notify(1234, notification); (15)
} else { // NotificationCompat은 젤리빈 이전 버전의 호환을 위함
NotificationCompat.Builder noti =
new NotificationCompat.Builder(NotificationSample.this);
noti.setTicker(ticker);
noti.setContentTitle(title);
noti.setContentText(msg);
noti.setSmallIcon(android.R.drawable.ic_input_add);
noti.setWhen(System.currentTimeMillis());
noti.setContentIntent(pIntent);
noti.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 });
Notification notification = noti.build();
notiManager.notify(1234, notification);
}
[/php]

번호 설명
(1) 알림 매니저 객체 생성
(2) 알림을 눌렀을 때 실행 할 Activity 설정
(3) 다른 컴포넌트가 intent를 사용 가능하도록 PendingIntent 생성 및 설정
(4) 젤리빈 이후 Bulider를 사용 하도록 변경되어 버전에 따른 분기
(5) 알림 객체 생성
(6) 화면에 나타나는 알림 타이틀 설정
(7) 메시지의 타이틀 설정
(8) 메시지 내용 설정
(9) 아이콘 설정
(10) 알림이 날아온 시간 설정
(11) 알림의 id 설정. 이 후 id를 통해 알림을 사라지게 하는 등의 처리가 가능
(12) 인텐트 설정
(13) 진동 설정
(14) 알림 객체에 build를 넣어줌
(15) 알림 날림 인자로 id와 알림 객체를 넣어준다.

<step5/NotificationMessage>
[php]
NotificationManager noti = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// notification을 만들 때 지정한 id를 설정하여 해당 알림을 없앰
noti.cancel(1234); (1)
[/php]

번호 설명
(1) 해당 id의 알림을 알림창에서 제거한다.



그림 26. Notification