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

gps 처음 값이 항상 (0,0)입니다 ㅠㅠ

0 추천

gps 값 받아오는데 처음 값은 항상 (0,0)이고 2번째부터 제대로된 값이 들어오는데 어디에 문제가 있는 걸까요??

public class saveAlarm extends AppCompatActivity {
    static String bu;
    static int flag = 0;
    TextView tv;
    connectInfo ci = new connectInfo();
    saveAlarm.BackgroundTask task;

    static int alarm_num = 0;
    static double mylocation_x = 0;
    static double mylocation_y = 0;

    String[] permission_list = {
            Manifest.permission.ACCESS_COARSE_LOCATION,
            Manifest.permission.ACCESS_FINE_LOCATION
    };

    Location myLocation; //현재 사용자 위치


    LocationManager manager;//위치 정보를 관리하는 객체 추출

    GoogleMap map;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_function2);

        findViewById(R.id.etc);

        //체크할 권한 배열
        String[] permission_list = {
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.ACCESS_FINE_LOCATION
        };
        // 현재 사용자 위치
        Location myLocation;

        // 위치 정보를 관리하는 매니저
        LocationManager manager;


        Button btn_mylocation = (Button) findViewById(R.id.addalarm);
        btn_mylocation.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                checkPermission();
                showMyLocation();
                task = new saveAlarm.BackgroundTask();
                task.execute();
            }
        });

        Button btn = (Button) findViewById(R.id.back);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), Main2Activity.class);
                startActivity(intent);
            }
        });





        if (android.os.Build.VERSION.SDK_INT > 9) { //oncreate 에서 바로 쓰레드돌릴려고 임시방편으로 넣어둔소스
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);

        }
    }

    public void checkPermission() {
        boolean isGrant = false;
        for (String str : permission_list) {
            if (ContextCompat.checkSelfPermission(this, str) == PackageManager.PERMISSION_GRANTED) {
            } else {
                isGrant = false;
                break;
            }
        }
        if (isGrant == false) {
            ActivityCompat.requestPermissions(this, permission_list, 0);
        }
    }


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        boolean isGrant = true;
        for (int result : grantResults) {
            if (result == PackageManager.PERMISSION_DENIED) {
                isGrant = false;
                break;
            }
        }
        // 모든 권한을 허용했다면 사용자 위치를 측정한다.
        if (isGrant == true) {
            getMyLocation();
        }
    }

    //현재 위치 가져오는 함수
    public void getMyLocation() {
        manager = (LocationManager) getSystemService(LOCATION_SERVICE);
        // 권한이 모두 허용되어 있을 때만 동작하도록 한다.
        int chk1 = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
        int chk2 = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
        if (chk1 == PackageManager.PERMISSION_GRANTED && chk2 == PackageManager.PERMISSION_GRANTED) {
            myLocation = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            showMyLocation();
        }
        // 새롭게 위치를 측정한다.
        saveAlarm.GpsListener listener = new saveAlarm.GpsListener();

        if (manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
            manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 10, listener);
        }
        if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, listener);
        }

    }


    class GpsListener implements LocationListener {
        @Override
        public void onLocationChanged(Location location) {
            // 현재 위치 값을 저장한다.
            myLocation = location;
            // 위치 측정을 중단한다.
            manager.removeUpdates(this);
            // 지도를 현재 위치로 이동시킨다.
            showMyLocation();
        }

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

        @Override
        public void onProviderDisabled(String provider) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }
    }

    public void showMyLocation() {
        // LocationManager.GPS_PROVIDER 부분에서 null 값을 가져올 경우를 대비하여 장치
        if (myLocation == null) {
            return;
        }
        // 현재 위치값을 추출한다.
        mylocation_x = myLocation.getLatitude();
        mylocation_y = myLocation.getLongitude();
        Log.d("RESPONSE", "location : " + mylocation_x);

    }

 

joelll (160 포인트) 님이 2018년 11월 12일 질문

1개의 답변

0 추천
getmyLocation 에 있는

showMyLocation을 주석해보고 로그 뜨는거 확인해보세요.
비뢰광 (7,400 포인트) 님이 2018년 11월 12일 답변
네 해볼게요 정말 감사합니다!!!
...