마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

gps켜서 위도경도를 추출한 다음 상단바에서 아이콘이 깜밖이는걸 없애고 싶습니다..

0 추천

안녕하세요.

위,경도를 실행시 최초 1회만 뽑는데 깜박깜박 거리는 아이콘이 사라지지 않아서 질문드립니다..

//gps 위치관리
String loc_context = Context.LOCATION_SERVICE; //
locManager = (LocationManager) getSystemService(loc_context);
locationProviders();
 

/* GPS 추출 함수 */
    public void locationProviders() {
    //TextView tv = (TextView)findViewById(R.id.TextView01);

    /*
    1. String 객체는 불변이기 때문에 변하지 않는 문자열은 String을 사용한다.
2. StringBuilder는 비동기방식이기 때문에 Single Thread 환경하에서, 변화되는 문자열의 사용한다.
3. StringBuffer 동기방식으로 저장되기 때문에 멀티쓰레드로 접근하거나 문자열이 변경될 경우에 사용한다.
    */
   
    List<String> pvdGroup = locManager.getProviders(true); // 현재 사용할수 있는 공급자를 리스트로 불러들인다.
    System.out.println("---------gps1---------");
    /*
    public void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
    provider: 사용할 프로바이더의 이름
    minTime: 몇 밀리초 간격으로 통지할것인지 정의
    minDistance 최소 간격, 단위는 미터
    listener 어떤 리스너가 통지되었는지 기술
    */
    StringBuilder str = new StringBuilder("");
    System.out.println("---------gps2---------");
    System.out.println(pvdGroup);
    for(String pvder : pvdGroup) { // 가져온 리스트의 크기만큼 반복
    System.out.println("---------gps3---------");
        str.append("위치 공급자 ");
    locManager.requestLocationUpdates
          (pvder, 2000, 0, new LocationListener() {// 현재 사용할수있는 프로바이더를 가지고 오고, 1초 간격으로 업데이트
          public void onLocationChanged(Location location) {} // 위치 변화감지
          public void onProviderDisabled(String provider) {} // 프로바이더 꺼짐 감지
          public void onProviderEnabled(String provider) {} // 프로바이더 활성 감지
          public void onStatusChanged // 상태변화 감지
                (String provider, int status, Bundle extras) {}
          });
    str.append(":").append(pvder).append("\n"); // 여기서 활성화된 위치 공급자의 이름을 하나 찍어줌. 예제에서는 GPS가 나올것임
   
    //Location loc = locManager.getLastKnownLocation(pvder); // 위치메니저로부터 마지막에 알려진 위치를 좌표에 넣는다.
    Location loc = locManager.getLastKnownLocation( LocationManager.NETWORK_PROVIDER );
    System.out.println("---------gps4---------");
    System.out.println(loc);
    if(loc != null) { // 전에 지정된 위치가 있었다면
    double lat = loc.getLatitude();      // 위도: 가로 // 그 위치를 받아올 것이고,
    double lng = loc.getLongitude();    // 경도: 세로
                //str.append("위도:").append(lat).append(", 경도:").append(lng+"\n"); // 표시해줄 것이다.
    str.append("&lat=").append(lat).append("&lng=").append(lng+"\n"); // 표시해줄 것이다.
    UtilNavi_loc  = String.valueOf(lat);
    Log.d("UtilNavi_loc----->",UtilNavi_loc);
    UtilNavi_loc  = "&lat="+UtilNavi_loc+"&lng="+String.valueOf(lng);
    Log.d("UtilNavi_loc----->",UtilNavi_loc);
    } else {
    str.append("위치를 찾을 수 없음"); // 만약에 위치를 못찾았다면, 위치를 찾을 수 없다고 표시될것이다.
    }
   
    }
    getBaseContext();
    //Toast.makeText(getBaseContext(),str, Toast.LENGTH_SHORT).show();
    Log.d("위치=====>>>>", "str==== : " + str );
    Log.d("위치=====>>>>", "str==== : " + UtilNavi_loc );
    } 
 

 

이렇게 하고있습니다.

로그들을 봐도 딱 한번만 실행됩니다.. 아이콘을 끄는 방법이 따로 있는건지.. 궁굼합니다..

읽어주셔서 감사합니다.

 

 

 

꾸우우 (1,140 포인트) 님이 2015년 7월 13일 질문

1개의 답변

0 추천
 
채택된 답변
리스너를 붙여놧으니 requestLocationUpdates가 계속 호출될 것으로 예상되는군요

removeUpdates로 붙였놨던 리스너를 제거해주시기 바랍니다.
Gradler (109,780 포인트) 님이 2015년 7월 13일 답변
꾸우우님이 2015년 7월 14일 채택됨
locManager.removeUpdates(new LocationListener() {// 현재 사용할수있는 프로바이더를 가지고
            // 오고, 1초 간격으로 업데이트
            public void onLocationChanged(Location location) {
            } // 위치 변화감지

            public void onProviderDisabled(String provider) {
            } // 프로바이더 꺼짐 감지

            public void onProviderEnabled(String provider) {
            } // 프로바이더 활성 감지

            public void onStatusChanged // 상태변화 감지
            (String provider, int status, Bundle extras) {
            }
        });

이렇게 추가했는데요.. 안없어 지는데요...
'-' 지금 작성자님의 댓글을 해석하자면 이렇습니다.
주머니에 100원짜리 동전 하나를 넣은 뒤
(들어 있지도 않은) 500원 짜리 동전을 뺏습니다.
그리고서 100원짜리 동전이 왜 안빠지죠?

같은 request할때 넣었던 listener를 넣으셔야지,
왜 listener를 새로 만들면서 remove 시키나요..?
...