안드로이드 gps를 이용한 현재위치(위도,경도) 구하는 문제입니다.


안녕하세요. 안드로이드를 개발중인 학생입니다. gps를 이용하여 어떠한 event발생시 현재 위치의 위도,경도 값을 알고 싶습니다. 여럿 구글링을 통해서 수많은 코드를 복붙했지만 ㅠㅠㅠㅠ 제대로 돌아가는 코드가 없습니다.

제가 알기로는 안드로이드 API버전이 23이 이상이되면서 permission문제가 까다로워져서 이러한 문제가 발생한것 같은데... 특정 event발생시 gps를 이용하여 위도,경도 값을 구하는 방법이 없나요...?

아래는 처음 앱 빌드시 켜지는 activity의

onCreate 함수의 일부분 코드입니다.

Log.d("Main", "onCreate");

    // Acquire a reference to the system Location Manager
    LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

    // GPS 프로바이더 사용가능여부
    isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    // 네트워크 프로바이더 사용가능여부
    isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

    Log.d("Main", "isGPSEnabled=" + isGPSEnabled);
    Log.d("Main", "isNetworkEnabled=" + isNetworkEnabled);

    LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            double lat = location.getLatitude();
            double lng = location.getLongitude();
            Toast.makeText(BT_List.this, lat + " " + lng, Toast.LENGTH_SHORT).show();
        }

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

        public void onProviderEnabled(String provider) {
        }

        public void onProviderDisabled(String provider) {
        }
    };

    // Register the listener with the Location Manager to receive location updates
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

    // 수동으로 위치 구하기
    String locationProvider = LocationManager.GPS_PROVIDER;
    Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);
    if (lastKnownLocation != null) {
        double lng = lastKnownLocation.getLatitude();
        double lat = lastKnownLocation.getLatitude();
        Log.d("Main", "longtitude=" + lng + ", latitude=" + lat);
    }

조회수 1714


1 답변


  • 2016년 08월 04일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

  • 안드로이드 API 23버전만 올라가도 이러한 방법이 잘 안되더라구요... permission문제가 많이 복잡한것 같습니다ㅠㅠㅠㅠㅠ    Hyunjoong Kim   2016.8.6 08:36     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close