구현할 내용
- 서버로부터 결과값을 받으면 알림 띄우기
class로 구현하는 이유 ::
activity가 아닌 class에서 호출하기 위함
= activity에 종속되지 않기 위해서
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());
}
}
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);
}
}
}