Tech. Forum 개발자들을 위한 정보 공유의 장입니다
닫기

Tech.Forum

GPS 수신..질문있습니다.

#1

안녕하세요, 항상 고생 많으십니다^^…

현재 GPS를 사용하여 현재위치를 받아오려고 하는데, 계속해서 SKT 타워 위치에서만 잡히네요.
답답한 마음으로 get.location() 를 띄웠더니 좌표값이 0.0 , 0.0 이렇게 나오더라구요…
setLocationCallback 함수도 로그로 true 라고 나옵니다 ㅠㅠ.

소스는 대략 이정도입니다… 한번 봐주시면 감사하겠습니다…

///GPS 소스단

if (LOCATION == PackageManager.PERMISSION_GRANTED && NETWORK == PackageManager.PERMISSION_GRANTED && INTERNET == PackageManager.PERMISSION_GRANTED) {

        LinearLayout linear = (LinearLayout) findViewById(R.id.linear2);
        tmap = new TMapView(gpsActivity.this);
        API = "키입력";
        tmap.setSKTMapApiKey(API);

        linear.addView(tmap);
      /*  setContentView(linear);*/
        gps = new TMapGpsManager(gpsActivity.this);
        gps.setMinTime(1000);
        gps.setMinDistance(1);
        gps.setProvider(gps.NETWORK_PROVIDER);
        /*gps.setProvider(gps.GPS_PROVIDER);*/
        gps.OpenGps();
        TMapPoint point = gps.getLocation();


        TData = new TMapData();
        //혀재 위치로 표시될 아이콘 표시 ture / false
        tmap.setIconVisibility(true);

        //현재 중심을 단말의 현재위치로 이동
        tmap.setTrackingMode(true);
        tmap.setSightVisible(true);
        // 줌 레벨 조정
        tmap.setZoomLevel(18);
        tmap.setMapPosition(TMapView.POSITION_NAVI);
        tmap.setMapType(tmap.MAPTYPE_STANDARD);
        //나침판기능(지도회전)
        tmap.setCompassMode(true);
        Log.d("로그확인", String.valueOf(gps.setLocationCallback()));
        Log.d("로그확인2", String.valueOf(point));
    }

/// onLocationchange 함수//

public void onLocationChanged(Location location) {

    if(location != null) {
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();
        tmap.setCenterPoint(location.getLongitude(), location.getLatitude());
        tmap.setLocationPoint(location.getLongitude(), location.getLatitude());

    }
0 Likes

#2

안녕하세요.
T map API 운영담당자 입니다.

문의주신 내용을 검토해본 결과 GPS 관련된 권한이 빠진 것이 원인인 것 같습니다.

아래의 안드로이드 xml에 내용을 추가해주시기 바랍니다.


< AndroidManifast.xml >
< uses-permission android:name=“android.permission.ACCESS_FINE_LOCATION” >

만약 사용하시는 안드로이드 기기의 API 버전이 23 버전 이상이시라면 위치권한 허용에 관한 여부를 묻는 내용을 추가해주셔야 합니다.

아래의 소스를 참고하시면 도움이 되실 겁니다.


if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
     ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}

감사합니다.

0 Likes

#3

permisson 허용도 하였습니다만… 아무래도 location changed 함수가 호출되지 않는 것 같습니다.
location changed 함수에 LOG를 남겨두었는데 로그자체가 안뜨네요…
한번만 더 봐주시면 감사하겠습니다…
아무래도 위 함수가 호출되지 않아 gps 를 못받아오는 것 같습니다…



0 Likes

#4

안녕하세요.
T map API 운영담당자 입니다.

보내주신 내용만으로는 onLocationChanged 동작하는 시점을 정확히 파악하기 어렵습니다.

다만, 안드로이드 LocationListener의 onLocationChanged 함수는 LocationManager 클래스의 requestLocationUpdates 메소드로 별도의 동작을 시켜줘야합니다.

아래의 소스를 참고하시면 도움이 되실 겁니다.


LocationManager locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
   @Override
   public void onLocationChanged(Location location) {
      if(location != null) {
         double latitude = location.getLatitude();
         double longitude = location.getLongitude();

         tmap.setCenterPoint(longitude, latitude);          tmap.setLocationPoint(longitude, latitude);       }    }

   @Override    public void onStatusChanged(String provider, int status, Bundle extras) {}

   @Override    public void onProviderEnabled(String provider) {}

   @Override    public void onProviderDisabled(String provider) {} };

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); --------------------------

감사합니다.

0 Likes

#5

덕분에 잘 해결했습니다. 너무나 감사합니다^^
안됐던 이유는 우선,
사용자가 권한을 원래부터 가지고 있었을 때와 가지고 있지 않았을 때 조건을 두고 진행을 하였는데,
두 부분이 정확히 구분지어져 있지 않은 부분과 알려주신 메소드 locationManager.requestLocationUpdates 를 활용하지 않은 상태에서 계속 실행을 했었습니다. 알려주신 메소드를 활용하는 덕분에 잘 해결 됐습니다. 다시한번 감사합니다.^^

0 Likes