프로그램/Android

안드로이드 위치사용법(LocationManager 사용하기)

잡식성초보 2017. 9. 5. 09:00



안드로이드 자체적으로 좌표를 가져오는 방법입니다


요즘같은 경우 권한이 있어야 하므로 작업하실때 권한에 대하여 많은 주의를 하셔야 할것입니다.  


StartLocation()을 사용하기 이전에 권한에 대한 체크를 해주시고 AndroidManifest.xml에 아래와 같은 권한을 넣어야 합니다.



private void StartLocation(){

        if(mLocationManager != null){

            isGPSEnable = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
            isNetworkEnable = mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            Log.e(TAG, "isGPSEnable : "  + isGPSEnable);
            Log.e(TAG, "isNetworkEnable : " + isNetworkEnable);

            locationListener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    double lat = location.getLatitude();
                    double lng = location.getLongitude();

                    Toast.makeText(mContext, "위도 : " + lat + " 경도 : " + lng, Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {
                    Log.e(TAG, "onStatusChanged : ");
                }

                @Override
                public void onProviderEnabled(String provider) {
                    Log.e(TAG, "onProviderEnabled : ");
                }

                @Override
                public void onProviderDisabled(String provider) {
                    Log.e(TAG, "onProviderDisabled : ");
                }
            };

            //아래 코드를 실행시키기 위해서 임의적으로 한번 더 권한 체크를 하여야함. 그렇지 않으면 error
            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return;
            }

            if(isGPSEnable && isNetworkEnable){

                //시스템 위치마저 허용되어있을경우
                mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 100, locationListener);
                mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100, 100, locationListener);

            }else{

                //시스템 위치 셋팅으로 넘겨야함
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivityForResult(intent, systemLocationPermission);
            }
        }
    }



<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>


반응형