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);
}