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

mapv2 한번 소스좀 봐주세요..

0 추천

처음에 바로 만들어서 실행시 위치가 떳는데 몇일이 지난뒤 다음날 실행해보면 위치찾기만 계속돌아가고 안뜨네요.

배달의민족 이런데는 제위치가 뜨는데.. 뭐가 문제인지 한번 봐주세요.

실행될때 코드 그래도링고 변형한적은 없고 따로 오류는 나지않습니다.

mapv2도 잘실행되는데 위치를 못받아옵니다..


    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

매니페스트에는 다 추가해놓았습니다.

			protected void onResume() {
			// TODO Auto-generated method stub
			super.onResume();
			mLocation.requestLocationUpdates(mProvider, 3000, 10, mListener);
		}

리줌에서 바로 실행시 실행이 시작되고요

	mProvider = mLocation.getBestProvider(new Criteria(), true);

베스트 좋은 gps방식으로 얻어오기를 했씁니다.

android.location.LocationListener mListener = new android.location.LocationListener() {
		
		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) { 
			String sStatus = "";
			switch(status){
			case LocationProvider.OUT_OF_SERVICE:
				sStatus = "범위벗어남";
				break;
			case LocationProvider.TEMPORARILY_UNAVAILABLE:
				sStatus = " 일시적불능"	;
				break;
			case LocationProvider.AVAILABLE:
				sStatus = "사용가능";
				break;
			}
			mTextmap.setText(provider + "상태변경" + sStatus);
			
		}
		
		@Override
		public void onProviderEnabled(String provider) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onProviderDisabled(String provider) {
			// TODO Auto-generated method stub
			mTextmap.setText("현재상태:서비스사용불가");
		}
		
		@Override
		public void onLocationChanged(Location location) {// 맵이 변경되었을때
			// TODO Auto-generated method stub
			

			 lat = location.getLatitude();
			lng = location.getLongitude();
			
			mTextmap.setText(findAddress(lat, lng));
			mapname = findAddress(lat, lng);
			
		}
	};
	
	@Override
	protected void onPause() { // 피니시쉬 맵서비스 중지
		super.onPause();
		mLocation.removeUpdates(mListener);
	}
	public String findAddress(double lat , double lng){ // 위도 경도를 이용한 한글주소 찾기
		StringBuffer sb = new StringBuffer();
		
		Geocoder geocoder = new Geocoder(TxtActivity.this,Locale.getDefault());
		
		List<Address> address;
		try{
			address = geocoder.getFromLocation(lat, lng, 1);
			if(address == null){
				mTextmap.setText("주소얻기실패");
				return null;
			}
			if(address.size()>0){
				String juso = address.get(0).getAddressLine(0).toString();
				sb.append(juso);
			}
		}catch(Exception e){
			e.getStackTrace();
		}
		return sb.toString();
		
	}

리스너에서는 현재위치를 받아와 텍스트뷰에 뿌려줍니다.

계속 위치찾기만 하고 텍스트뷰에 뿌려주지를 않네요.. getbestprovider말고 다른것도 사용해야하나요?

고수분들 한번씩만 도와주시길바랍니다.

신참개발자 (380 포인트) 님이 2015년 1월 20일 질문

1개의 답변

0 추천
개인적으로 getbestprovider 를 사용하지 않고

직접 LocationManager.GPS_PROVIDER 나 LocationManager.NETWORK_PROVIDER 를 지정해 줍니다.

물론 상황에 따른 조건 처리는 해줍니다. GPS 가 켜져 있는지 등...

저도 위치 정보를 활용한 앱을 만들 때

https://medium.com/marojuns-android/location-manager%EB%A5%BC-%ED%86%B5%ED%95%9C-%EC%9C%84%EC%B9%98%EC%B8%A1%EC%9C%84-%EC%A0%84%EB%9E%B5-3a027af7a601

위 사이트의 내용을 많이 참고했습니다. 정리가 아주 잘 되어 있는 것 같아요.

포스트에서 getbestprovider는 빈번하게 null을 리턴하니 그에 대한 처리가 필요하다고 하는데

질문자분께서도 그런 경우가 아닐까 싶습니다.
가랑비 (10,530 포인트) 님이 2015년 1월 21일 답변
...