안드로이드 Notification
Intro
Notification 사용하기
Notification 구현
public void show()
{
// 알람 표시할지 스위치 상태
if(!sharedPref.loadAlarm())
{
return; // false일시 알람을 띄우지않음
}
// 내용 초기화
mDialogContent.setLength(0);
dbHelper = MemoDBHelper.getInstance(this);
String[] params = {mTime};
Cursor cursor = (Cursor) dbHelper.getReadableDatabase().query(MemoContract.MemoEntry.TABLE_NAME, null, "date=?", params, null, null, null);
cursor.moveToFirst();
if (cursor != null && cursor.getCount() != 0)
{
if (cursor.getCount() == 1) // 일정이 1개 일시
{
mDialogContent.append(cursor.getString(cursor.getColumnIndexOrThrow(MemoContract.MemoEntry.COLUMN_NAME_TITLE))); // 커서 첫줄을 표시
}
else
{
mDialogContent.append(cursor.getString(cursor.getColumnIndexOrThrow(MemoContract.MemoEntry.COLUMN_NAME_TITLE))); // 커서 첫줄 제목과 그외 갯수 표시
mDialogContent.append(" 외 ");
mDialogContent.append(cursor.getCount() - 1);
mDialogContent.append("개의 일정이 있습니다.");
}
}
else
{
mDialogContent.append("오늘의 일정이 없습니다."); // 일정이 없을 경우
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "default");
builder.setSmallIcon(R.mipmap.ic_launcher_calendar); // 아이콘
builder.setContentTitle("오늘의 일정"); // 제목
builder.setContentText(mDialogContent.toString()); // 내용
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,
0,
intent,
PendingIntent.FLAG_CANCEL_CURRENT);
builder.setContentIntent(pendingIntent);
Bitmap largeIcon = BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_launcher_calendar);
builder.setLargeIcon(largeIcon);
builder.setAutoCancel(false);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
manager.createNotificationChannel(new NotificationChannel("default", "기본 채널", NotificationManager.IMPORTANCE_LOW));
manager.getNotificationChannel("default").setVibrationPattern(new long[]{ 0 }); // 진동제거
manager.getNotificationChannel("default").enableVibration(true);
}
manager.notify(1, builder.build());
}
데이터 베이스에 저장된 일정을 StringBuffer
인 mDialogContent
에 저장시킨 다음 NotificationCompat.Builder
개체를 생성하고 제목, 아이콘 , 내용(mDialogContent)를 세팅했다.
그리고 PendingIntent에 액티비티에 대한 정보를 담은다음 NotificationChannel
를 구성 해주었다.
NotificationChannel
은 안드로이드8.0(오레오) 부터 필수로 사용되었으며 채널을 통해 각각의 Notification
의 진동이나 소리등의 중요도를 관리 할 수 있다.
마지막으로 알림은 manager.notify(1, builder.build());
메서드로 실행할 수 있다.
또한 manager.cancel(1);
은 해당 ID를 가진 알림을 삭제한다.
실행 결과
참고자료
https://developer.android.com/guide/topics/ui/notifiers/notifications?hl=ko
댓글남기기