Class로 Notification 설정

Hwan·2023년 2월 16일
0

voicekeeper

목록 보기
9/16

구현할 내용

  • 서버로부터 결과값을 받으면 알림 띄우기

class로 구현하는 이유 ::

  • activity가 아닌 class에서 호출하기 위함
    = activity에 종속되지 않기 위해서


    1. NotificationUtil.java

  • Activity가 아닌 class로 생성

public class NotificationUtil extends BroadcastReceiver {
    private String channelId = "channel";
    private String channelName = "channelName";

    @Override
    public void onReceive(Context context, Intent intent) {
   
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        
        //오레오 대응
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, importance);
            notificationManager.createNotificationChannel(notificationChannel);
        }

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context.getApplicationContext(), channelId);
        Intent notificationIntent = new Intent(context.getApplicationContext(), RecordListActivity.class);  // 알림 클릭 시 이동할 액티비티 지정
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

        // FLAG_UPDATE_CURRENT : 이미 생성된 PendingIntent가 존재하면 해당 Intent의 Extra Data만 변경한다.
        PendingIntent pendingIntent = PendingIntent.getActivity(context.getApplicationContext(), 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE);

        builder.setContentTitle("통화상황 분석이 완료되었습니다.");
        builder.setContentText("알림을 누르면 분석 화면으로 이동합니다!");
        builder.setSmallIcon(R.drawable.vk_color);
        builder.setContentIntent(pendingIntent);
        builder.addAction(R.drawable.vk_black, "확인", pendingIntent);
        builder.addAction(R.drawable.vk_black, "취소", pendingIntent );
        builder.setAutoCancel(true);
        builder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE);

        notificationManager.notify(0, builder.build());
    }

}

2. FileUploadUtils.java

private static class CallFunctionTask extends AsyncTask<Void, Void, String> {
		@Override
        protected void onPostExecute(String result) {
        	if (result == null) {
                // retry
                new CallFunctionTask().execute();
            } else {
	            // ... 생략 ...
                
            	NotificationUtil notificationUtil = new NotificationUtil();
                Intent intent = new Intent(MyApplication.getAppContext(), NotificationUtil.class);
         	}
    	}
}

0개의 댓글