12월 부터 새로운 구글맵 프로젝트를 생성하려면 google map v2를 사용해야 된다고 합니다.
이전 프로젝트는 google map v1을 그대로 사용하실수 있습니다
google map v2에서 현재위치 받아오는 법을 포스팅 해보겠습니다.
1.인증 및 초기설정 지도띄우기는 http://androidhuman.tistory.com/518 에 정리가 잘되어 있습니다
- 주의 할점이 프로젝트가 에러나는 경우가 발생하면 google-play-services_lib 를 빌드한후에 google-play-services_lib를 생성하고자 하는 프로젝트로 가져오면 에러 없이 잘 동작됩니다
2. http://patesush.blogspot.kr/2012/12/how-to-create-app-for-google-map-v2-in.html 참고 했습니다
=========================================================================================================
//****************** 현재위치 받기 Activity ********************************//
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.LocationSource;
import com.google.android.gms.maps.LocationSource.OnLocationChangedListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import android.R.layout;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
public class LocationActivity extends FragmentActivity implements LocationListener {
private GoogleMap mmap;
private LocationManager locationManager;
private String provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loaction);
GooglePlayServicesUtil.isGooglePlayServicesAvailable(LocationActivity.this);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, true);
if(provider==null){ //위치정보 설정이 안되어 있으면 설정하는 엑티비티로 이동합니다
new AlertDialog.Builder(LocationActivity.this)
.setTitle("위치서비스 동의")
.setNeutralButton("이동" ,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);
}
}).setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
finish();
}
})
.show();
}else{ //위치 정보 설정이 되어 있으면 현재위치를 받아옵니다
locationManager.requestLocationUpdates(provider, 1, 1, LocationActivity.this);
setUpMapIfNeeded();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {//위치설정 엑티비티 종료 후
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 0:
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, true);
if(provider==null){//사용자가 위치설정동의 안했을때 종료
finish();
}else{//사용자가 위치설정 동의 했을때
locationManager.requestLocationUpdates(provider, 1L, 2F, LocationActivity.this);
setUpMapIfNeeded();
}
break;
}
}
@Override
public void onBackPressed() {
this.finish();
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(this);
}
private void setUpMapIfNeeded() {
if (mmap == null) {
mmap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapview)).getMap();
if (mmap != null) {
setUpMap();
}
}
}
private void setUpMap() {
mmap.setMyLocationEnabled(true);
mmap.getMyLocation();
}
boolean locationTag=true;
@Override
public void onLocationChanged(Location location) {
if(locationTag){//한번만 위치를 가져오기 위해서 tag를 주었습니다
Log.d("myLog" , "onLocationChanged: !!" + "onLocationChanged!!");
double lat = location.getLatitude();
double lng = location.getLongitude();
Toast.makeText(LocationActivity.this, "위도 : " + lat + " 경도: " + lng , Toast.LENGTH_SHORT).show();
locationTag=false;
}
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
========================================================================================================
'안드로이드' 카테고리의 다른 글
SharedPreferences 사용법 (0) | 2013.04.05 |
---|---|
android google map v2 지도 터치시 마커 찍기 (0) | 2013.01.23 |
TextView html 적용하기,일부 글자색 바꾸기 (0) | 2012.11.13 |
php를 이용한 gcm 푸시 예제[2] (0) | 2012.11.05 |
php를 이용한 gcm 푸시 예제[1] (12) | 2012.11.05 |