알단지(알람 + 단국대 + 지도)
유튜브에서 확인하기
단국대 학생들을 위한 통합 어플리케이션
발표 ppt로 전체 내용 확인하기
단국대 학생들이 주로 사용하는 어플리케이션의 부족한 점을 분석, 보완한 새로운 어플리케이션의 구현
- 알람 기능 : 많은 대학생들이 사용하는 '에브리타임' 어플의 경우 강의 별 알람은 제공 X
- 캠퍼스 맵 기능 : 단국대 공식 어플은 캠퍼스 맵 기능을 제공하지 않으며, 매번 단국대 홈페이지를 들어가야 하는 번거로움 이 기획의도들의 달성을 통해 단국대 학생들의 쾌적한 캠퍼스 라이프를 목표로 함
- 실제 단국대 종합시간표(2020년 2학기)를 크롤링 해 DB 내의 데이터 검색 기능을 수행
- 키워드만 검색해도 검색 내용이 나오도록 설정(FindClassActivity.java)
autoCompleteTextView.setOnQueryTextListener(new androidx.appcompat.widget.SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
query = databaseReference.orderByChild("classname").startAt(s).endAt(s + "\uf8ff");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
- 알람 데이터를 저장할 데이터베이스 필요(SQLite)
- 안드로이드 지원 라이브러리인 NotificationCompat.Builder 객체를 사용해 푸쉬 알람 생성(AlarmReceiver.java)
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID);
builder.setSmallIcon(R.drawable.alarm_clock3).setContentTitle("알단지").setContentText("강의가 곧 시작합니다.")
.setWhen(Calendar.getInstance().getTimeInMillis())
.setContentIntent(pendingIntent).setAutoCancel(true);
notificationManager.notify(0, builder.build());
- 백그라운드 실행을 위해 Service 객체 사용(MyService.java)
AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendarTime, sender[count]);
- BroadcastReceiver를 통한 푸쉬 전송 (AlarmReceiver.java)
- Mapbox Studio를 활용한 교내 지도 제작
- Directions API를 활용한 경로 및 정보 제공(NavigationFragment.java)
private void getRoute_navi_walking (Point origin, Point destinaton) {
// https://docs.mapbox.com/android/navigation/overview/map-matching/
NavigationRoute.builder(getActivity()).accessToken(Mapbox.getAccessToken())
.profile(DirectionsCriteria.PROFILE_WALKING)//도보 길찾기
.origin(origin)//출발지
.destination(destinaton).//도착지
build().
getRoute(new Callback<DirectionsResponse>() {
@Override
public void onResponse(Call<DirectionsResponse> call, Response<DirectionsResponse> response) {
if (response.body() == null) {
return;
} else if (response.body().routes().size() ==0) {
return;
}
currentRoute = response.body().routes().get(0);
if (navigationMapRoute != null) {
navigationMapRoute.removeRoute();
} else {
navigationMapRoute = new NavigationMapRoute(null, mapView, mapboxMap, R.style.NavigationMapRoute);
}
navigationMapRoute.addRoute(currentRoute);
}
@Override
public void onFailure(Call<DirectionsResponse> call, Throwable t) {
}
});
}
- OpenStreetMap을 활용해 실제 보행 가능 경로 추가
- Directions.prefab을 활용해 AR 경로 제공
- 실제 사용 중인 서비스의 부족한 점을 분석하고 구현
- 구현 과정에 있어 다양한 기술 스택의 사용
- 오픈 소스 기여를 통해 프로젝트를 구현
- 실제 기업과의 소통을 통해 문제점에 대한 해결책을 찾아냄
- 구현 과정에 있어 발생했던 문제점들에 대해 협의를 통한 해결책 모색
- 초기 목표로 했던 바 모두 달성
- Mapbox Tutorial
- Mapbox Documentation
- Android Developer Guide
- Mapbox와 주고받은 메일