Notification은 어플이 foregorund에서 실행 상태가 아니여도 사용자에게 정보를 제공할 수 있는 ui 형태입니다.
참고 - status bar란
이번 글에서는 기본 notification을 생성해보겠습니다.
1. project 생성
2. 화면 구성
3. NotificationChannel 생성
API 26버전 이후로는 Notification을 채널 별로 관리해야한다 ( 이전에는 App 단위로 운영, 지금은 App 하위에 Channel이 존재)
--> Channel을 생성하고 채널 안에 Notification을 생성해야 Notification을 사용할 수 있다.
java > MainActivity.java 열기
- 변수 PRIMAY_CHANNEL_ID는 CHANNEL을 구분하기 위한 ID이다 (고유값을 생성해 준 것 String에 의미가 있지는 않음)
- Notification을 생성 및 전달할때 NotificationManager가 필요해서 변수 생성.
4. Notification Builder 생성
Channel을 만든 뒤에는 Builder를 생성해야 한다.
Builder의 역할 - Notification을 생성해준다.( Notification을 생성할때 Notification.Compat class를 사용한다 - 규칙 )
Android Studio 상위 메뉴에서 New > Image Asset 클릭하면 나오는 화면입니다.
5. Button 정의 및 Notification 호출 하기
MainActivity onCreate() 메소드 안에 button을 정의(inflate) 하고 버튼에 대한 onClickListener을 정의
onClick 메소드 안에 버튼을 클릭 했을 때 동작이 들어간다.
setNotification은 아래에서 정의 할 예정
onCreate() 하위 적당한 곳에 sendNotification 메소드 정의
- getNotification으로 Builder 생성 -> NotificationManger로 Notification 전달(호출)
6. 결과
+
참고 소스
- activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/notify"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Notify Me!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
- MainActivity.java
package android.example.notification;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
// Channel에 대한 id 생성
private static final String PRIMARY_CHANNEL_ID = "primary_notification_channel";
// Channel을 생성 및 전달해 줄 수 있는 Manager 생성
private NotificationManager mNotificationManager;
// Notification에 대한 ID 생성
private static final int NOTIFICATION_ID = 0;
// Notification을 호출할 button 변수
private Button button_notify;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_notify = findViewById(R.id.notify);
button_notify.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
sendNotification();
}
});
createNotificationChannel();
}
//채널을 만드는 메소드
public void createNotificationChannel()
{
//notification manager 생성
mNotificationManager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
// 기기(device)의 SDK 버전 확인 ( SDK 26 버전 이상인지 - VERSION_CODES.O = 26)
if(android.os.Build.VERSION.SDK_INT
>= android.os.Build.VERSION_CODES.O){
//Channel 정의 생성자( construct 이용 )
NotificationChannel notificationChannel = new NotificationChannel(PRIMARY_CHANNEL_ID
,"Test Notification",mNotificationManager.IMPORTANCE_HIGH);
//Channel에 대한 기본 설정
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.enableVibration(true);
notificationChannel.setDescription("Notification from Mascot");
// Manager을 이용하여 Channel 생성
mNotificationManager.createNotificationChannel(notificationChannel);
}
}
// Notification Builder를 만드는 메소드
private NotificationCompat.Builder getNotificationBuilder() {
NotificationCompat.Builder notifyBuilder = new NotificationCompat.Builder(this, PRIMARY_CHANNEL_ID)
.setContentTitle("You've been notified!")
.setContentText("This is your notification text.")
.setSmallIcon(R.drawable.ic_android);
return notifyBuilder;
}
// Notification을 보내는 메소드
public void sendNotification(){
// Builder 생성
NotificationCompat.Builder notifyBuilder = getNotificationBuilder();
// Manager를 통해 notification 디바이스로 전달
mNotificationManager.notify(NOTIFICATION_ID,notifyBuilder.build());
}
}
참고 - 'Android developer codelabs' https://codelabs.developers.google.com/codelabs/android-training-notifications
[Android] res 폴더에 접근 하는 방법 ( R class / @ ) (0) | 2020.05.13 |
---|---|
[Android] Notification에 Intent 추가하기 ( Action 추가 ) (5) | 2020.05.08 |
[Android] 어플리케이션 인터넷 연결 manifest file 설정 (5) | 2020.04.07 |
[Android] Up 버튼 추가해주기 (2) | 2020.04.06 |
[Android] Date Picker 띄우기 ( 날짜 선택기 ) (0) | 2020.04.04 |