notification을 통해 휴대폰 알림을 만들 수 있다.
(1) activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="알림"
android:id="@+id/btn_n"/>
</LinearLayout>
액티비티에 버튼을 한 개 생성하여 버튼을 클릭하면 알림이 뜨도록 만들어 볼 것이다.
(2) MainActivity.java
package com.example.notificationexample;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationBuilderWithBuilderAccessor;
import androidx.core.app.NotificationCompat;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
NotificationManager nm;
NotificationBuilderWithBuilderAccessor nb;
Button btn_n;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_n = (Button)findViewById(R.id.btn_n);
btn_n.setOnClickListener(view -> {
NotificationSomethings();
});
}
private void NotificationSomethings() {
Bitmap mLargeIconForNoti =
BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background);
PendingIntent contentIntent = PendingIntent.getActivity(MainActivity.this, 0,
new Intent(getApplicationContext(), MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder =
new NotificationCompat.Builder(MainActivity.this)
.setSmallIcon(R.drawable.ic_launcher_background)
.setContentTitle("제목")
.setContentText("서브 제목")
.setTicker("상태바 한줄 메시지")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setLargeIcon(mLargeIconForNoti)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.setContentIntent(contentIntent);
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(1234, builder.build());
}
}
○ btn_n.setOnclickLister
btn_n 버튼을 누르면 NotificaitonSomethings() 라는 함수가 실행되도록 한다.
○ NotificationSomethings
(1) Bitmap
이미지 파일을 Bitmap을 통해 mLargeIconForNoti 라는 변수로 설정해주었다.
기본적으로 이미지 파일을 업로드 하기 위해서는
BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background); 와 같이 Resource뿐만 아니라 File, ByteArray , InputStreamp과 FileDescriptor을 통해 업로드 할 수 있다.
참고로 이번 예제에서 사용한 이미지 파일은 R.drawble.ic_launcher_background 로 기본적으로 drawable에 담긴 이미지 파일이다.
(2) PendingIntent
PendingIntent는 Intent의 일종으로서 일반 인텐트와는 다르게 컴포넌트에서 다른 컴포넌트에 작업을 요청하면 사전에 생성된 PendingIntent 작업을 수행한다. 즉, 특정 상황에서 미리 설정해둔 작업을 컴포넌트가 마치 자신의 원래 작업이듯이 실행한다는 뜻이다.
PendingIntent의 타입은 다음과 같다.
- PendingIntent.getActivity(Context, int, Intent, int) : Activity를 시작하는 Intent 생성
- PendingIntent.getService(Context, int, Intent, int) : Service를 시작하는 Intent 생성
- PendingIntent.getBroadcast(Context, int, Intent, int) : BroadcastReceiver를 시작하는 Intent 생성
위의 코드에서 사용한 PendingIntent.getActivity 에서의 Parameter는 다음과 같다.
- Context로 MainActivity 속의 내용을 사용하겠다고 명시
- requestcode 는 Pending intent 를 가져올 때 구분하기 위한 id (위의 코드에서는 그냥 0으로 설정)
- intent는 실행시키고 싶은 intent (위의 코드에서는 Application 생명주기동안 MainActivity 내용을 쓰기로 설정)
- flag 는 FLAG_CANCEL_CURRENT(이전에 생성한 PendingIntent 는 취소하고 새로 만듬), FLAG_NO_CREATE(이미 생성된 PendingIntent 가 없다면 null return. 생성된 PendingIntent 가 있다면 해당 intent 반환 (재사용)), FLAG_ONE_SHOT(한번만 사용 (일회용)), FLAG_UPDATE_CURRENT(이미 생성된 PendingIntent 가 존재하면 해당 intnet 의 extra data 만 변경) 이 있다.
(3) NotificationCompat.Builder을 통해 알림 콘텐츠와 채널 생성
여기서 알림을 꾸민다.
(4) NotificationManager, nm.notify
Notification을 관리하는 관리자 객체를 운영체제(Cotnetxt)로부터 만듬.
(5) nm.notify
NotificationManager의 고유 ID 및 (3)에서의 정보를 전달한다.
※ 실행화면
'study & bootcamp > 안드로이드 앱 스터디' 카테고리의 다른 글
[Andoid App 개발 스터디] 라디오 버튼형 Dialog (0) | 2021.08.13 |
---|---|
[Android App 개발 스터디] #17 Service 백그라운드 음악 (0) | 2021.08.13 |
Android App 개발 스터디 #16 Dialog 다이얼로그 팝업창 (0) | 2021.08.10 |
Android App 개발 스터디 #15 Thread & Handler 사용법 (0) | 2021.08.10 |
Android App 개발 스터디 #12 RecyclerView편 및 RecyclerView 입력 글자가 표시되도록 바꾸어보기 (0) | 2021.08.04 |