안드로이드 노티피케이션

프로그래밍/Android 2013. 8. 25. 12:08

안드로이드 노티피케이션


토스트 노티피케이션

- "파일이 저장되었습니다." 와 같은 짧은 텍스트 메시지를 표시하는데에는 최선이다.

- 사용자와 상호작용을 할 수 없다.

- 토스트 기초

Context context = getApplicationContext();

CharSequence text = "Hello toast!";

int duration = Toast.LENGTH_SHORT;


Toast toast = Toast.makeText( context, text, duration);

toast.show();



- 위치 설정

toast.setGravity( Gravity.TOP | Gravity.LEFT, 0, 0);



- 커스텀 토스트 뷰 생성

1. toast_layout.xml 파일에 레이아웃 정의

<LinearLayout

xmlns:android=”http://schemas.android.com/apk/res/android”

android:id=”@+id/toast_layout_root”

android:orientation=”horizontal”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:padding=”10dp”

android:background=”#DAAA” >

<ImageView android:id=”@+id/image”

android:layout_width=”wrap_content”

android:layout_height=”fill_parent”

android:layout_marginRight=”10dp”

/>

<TextView android:id=”@+id/text”

android:layout_width=”wrap_content”

android:layout_height=”fill_parent”

android:textColor=”#FFF”

/>

</LinearLayout>



2. JAVA 코드


LayoutInflater inflater = getLayoutInflater();

View layout = inflater.inflate( R.layout.toast_layout, 

(ViewGroup)findViewById( R.id.toast_layout_root));

ImageView image = (ImageView)layout.findViewById( R.id.image);

image.setImageResource( R.drawable.android);

TextView text = (TextView) layout.findViewById( R.id.text);

text.setText("Hello! This is a custom toast!");


Toast toast = new Toast(getApplicationContext());

toast.setGravity( Gravity.CENTER_VERTICAL, 0, 0);

toast.setDuration(Toast.LENGTH_SHORT);

toast.setView( layout);

toast.show();



상태바 노티피케이션

- 디바이스가 절전상태에 있는 동안 백그라운드로부터 생성될 수 있다.

- NotificationManager 는 모든 노티피케이션을 실행하고 관리하는 안드로이드 시스템 서비스이다.


// 노티피케이션 매니저 얻기

NotificationManager mNotificationManager = (NotificationManager)getSystemService( Context.NOTIFICATION_SERVICE);


// 노티피케이션 생성

int icon = R.drawable.notification_icon;

CharSequence tickerText = "Hello";

long when = System.currentTimeMillis();

Notification notification = new Notification(icon, tickerText, when);


// 노티피케이션 확장 메시지와 인텐트 정의

Context context = getApplicationContext();

CharSequence contentTitle = "My notification";

CharSequence contentText = "Hello World!";

Intent notificationIntent = new Intent( this, MyClass.class); // 두번째 인자에 노티피케이션 클릭시 이동할 Activity 클래스를 적어준다.

PendingIntent contentIntent = PendingIntent.getActivity( this, 0, notificationIntent, 0); // 노티피케이션이 선택되었을때의 처리

notification.setLatestEventInfo( context, contentTitle, contentText, contentIntent); //  노티피케이션 업데이트와 관련있다. 


// 노티피케이션 전달

private static final int HELLO_ID = 1;

mNotificationManager.notify( HELLO_ID, notification);



노티피케이션 업데이트

notification.setLatestEventInfo( context, contentTitle, contentText, contentIntent); //  노티피케이션 업데이트와 관련있다. 



사운드 추가하기

notification.defaults |= Notification.DEFAULT_SOUND;

notification.sound = Url.parse("file:///sdcard/notification/ringer.mp3");

또는 builder.setSound( Url.parse("file:///sdcard/notification/ringer.mp3"));



진동 추가하기

notification.defaults |= Notification.DEFAULT_VIBRATE;


// 진동을 추가하기 위해서는 진동 퍼미션이 있어야 한다.

// AdroidManifest.xml 에 아래 퍼미션을 추가해 줍니다.

<uses-permission android:name="android.permission.VIBRATE"/>



사용자 진동 패턴 

long[] vibrate = {0, 100, 200, 300); // 첫번째는 진동 시작전 기다리는 시간, 진동시간, 대기시간, 진동시간, 대기시간... 반복된다.



발광 추가가하기

notification.defaults |= Notification.DEFAULT_LIGHTS;

notification.lefARGB = 0xff00ff00;

notification.ledOnMS = 300;

notification.ledOffMS = 1000;

notification.flags |= Notification.FLAG_SHOW_LIGHTS;



기타

FLAG_AUTO_CANCEL : 노티피케이션이 선택된 이후, 자동으로 취소된다.

FLAG_INSISTENT : 사용자가 응답할때까지 오디오를 반복재상시킨다.

FLAG_ONGOING_EVENT :  Ongoing 타이틀 아래의 노티피케이션을 그룹화

FLAG_NO_CLEAR : 노티피케이션이 CLEAR 버튼에 의해 없어져서는 안된다는것을 가리킨다.

number 필드 : 노티피케이션 우측 상단에 보여지는 오버레이된 숫자

iconLevel 필드 : ?


커스텀 확장 뷰

1. custom_notification_layout.xml 파일 생성

<LinearLayout

xmlns:android=”http://schemas.android.com/apk/res/android”

android:orientation=”horizontal”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:padding=”3dp”

>

<ImageView android:id=”@+id/image”

android:layout_width=”wrap_content”

android:layout_height=”fill_parent”

android:layout_marginRight=”10dp” />

<TextView android:id=”@+id/text”

android:layout_width=”wrap_content”

android:layout_height=”fill_parent”

android:textColor=”#000” />

</LinearLayout>



2. java 코드

RemoteView contentView = new RemoteView(getPackageName(), R.layout.custom_notification_layout);

contentView.setImageViewResource( R.id.image, R.drawable.notification_image);

contentView.setTextViewText( R.id.text, "Hello, this message is in a custom expanded view");

notification.contentView = contentView;


Intent notificationIntent = new Intent( this, MyClass.class);

PendingIntent contentIntent = PendingIntent.getActivity( this, 0, notificationIntent, 0); // 노티피케이션이 선택되었을때의 처리


notification.contentIntent = contentIntent;


mNotification.notify( CUTOM_VIEW_ID, notification);


: