본문 바로가기
Projects/Find dust for Android

미세먼지 측정 앱 만들기 5

by Answer Choi 2015. 4. 30.
반응형

 

 

미세먼지 앱 v0.3

 

미세먼지앱 수정(2017/06/26)

 

미세먼지앱 수정(2019/12/09)-android o

 

이제 GPS에서 현위치 좌표를 가져오고, 이 좌표를 TM좌표로 변환하고, 

 

가까운 측정소에서 대기정보를 가져오는 앱을 만들어 보겠습니다.

 

먼저 레이아웃입니다.

 

제일 위에 가까운 측정소 정보 가져오는 버튼이 추가되었습니다.

 

그리고 현재 위치를 읽어와야해서 google services location API를 사용하였고,

 

TM좌표로 변환하기 위해 daum 좌표계 변환 API를 이용하였습니다.

 

각 API 사용에 대한건 아래 포스트를 방문해 주세요.^^

 

안드로이드 location (위치찾기)

 

좌표계 변환하기

 

그리고 가져온 TM좌표로 측정소 조회 API를 이용하여 가까운 측정소를 찾아보겠습니다.

 

먼저 버튼을 누르면 현재위치를 가져와야 겠죠?

 

1
2
3
case R.id.getNearStation:    
    mGoogleApiClient.connect();
    break;
cs

 

새로워진 Location API인 google Services API를 사용하면 위치찾기 코드가 아주 간단합니다.

 

이걸로 끝은 아니고 조금 세팅만하면^^

 

그러면 콜백함수가 호출됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
@Overridepublic
 void onConnected(Bundle bundle) {
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    Log.d("mLastLocation",String.valueOf(mLastLocation.getLatitude())+ "," +mLastLocation.getLongitude());
    if (mLastLocation != null) {
         getStation(String.valueOf(mLastLocation.getLatitude()),String.valueOf(mLastLocation.getLongitude()));
    }else{
        totalcnt.setText("위치를 알 수 없습니다.");
    }
    mGoogleApiClient.disconnect();
}
cs

 

이 콜백에서 좌표계값을 가져오고 daum api로 TM좌표로 변경합니다.

 

1
2
3
4
5
6
7
public static void  TransCoordThreadResponse(String x,String y) {    //대기정보 가져온 결과값
    if (x.equals("NaN")||y.equals("NaN")){
        totalcnt.setText("좌표값이 잘못 입력되었거나 해당값이 없습니다.");
    }else{
        //totalcnt.append("\r\n변환된 좌표값은 " + x + "," + y + "입니다.");
        getNearStation(y, x);    }    GetTransCoordThread.active=false;
}
cs

 

좌표계 변환이 바로 되었으면, 측정소 API를 이용하여 가까운 측정소를 가져오게 됩니다.

 

 
1
2
3
4
5
6
public static void  NearStationThreadResponse(String[] sStation,String[] sAddr,String[] sTm){    //측정소 정보를 가져온 결과
    where.setText(sStation[0]);
    totalcnt.setText("가까운 측정소 :" + sStation[0+ "\r\n측정소 주소 :" +sAddr[0]+"\r\n측정소까지 거리 :"+sTm[0]+"km");
    GetFindDustThread.active=false;
    GetFindDustThread.interrupted();
}
cs

 

여기까지 하면 측정소 이름부분에 가장 가까운 측정소의 이름이 입력됩니다.

 

이제 미세먼지 보기 버튼만 누르시면 대기정보를 가져오게 됩니다.

 

기존 대기 지수가 1~4등급이던걸 좋음~매우 나쁨으로 변경하였습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static public String transGrade(String intGrade){
    String trans=null;
    switch (intGrade){
        case "1":
            trans="좋음";
            break;
        case "2":
            trans="보통";
            break;
        case "3":
            trans="나쁨";
            break;
        case "4":
            trans="매우나쁨";
            break;
        default:
            break;
    }
    return trans;
}
cs

앱 실행화면 모습입니다.

 

 

가까운 측정소 찾기 버튼을 누른 모습입니다.

 

 

미세먼지 보기 버튼을 누른 모습입니다.

 

 

 

PS. 안드로이드 9버전으로 수정하였습니다.

 

수정된 부분은 위치 가져오는 부분과 기존 다음API를 사용하던 부분을 카카오API로 변경하였습니다.

(다음API는 더이상 지원을 하지 않습니다.)

 

반드시 카카오API 키를 받으신 후 사용하셔야 합니다.

 

 

 

 

 

 

 

 

 

반응형

인기글