2015-02-02 4 views
2

Android 4.4.4를 실행하는 맞춤 HW가 있습니다. Wi-Fi 연결은 있지만 GPS 또는 셀룰러 모듈은 없습니다. Wi-Fi를 기반으로 위치를 결정해야하지만 Android는 불가능합니다. 브라우저에서 google.com을 방문하면 '알 수없는'위치도 표시됩니다. - 와이파이가 확인하지만 작동 인터넷 검색을 등wifi의 Android 위치 만

다음은 위치를 결정하기 위해 내 샘플 클래스입니다 :

public class LocationServices { 
    Context mContext; 
    private static final String TAG = LocationServices.class.getSimpleName(); 

    LocationServices(Context c){ 
     mContext = c; 
    } 

    /** Check if we can get our location */ 
    public void checkLocation(){ 
     // Get the location manager 
     LocationManager locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); 
     String locationProviderWifi = LocationManager.NETWORK_PROVIDER; 
     String locationProviderGPS = LocationManager.GPS_PROVIDER; 
     LocationListener locationListenerNetwork; 
     LocationListener locationListenerGPS; 
     boolean gps_enabled=false; 
     boolean network_enabled=false; 

     //check wifi 
     ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

     if (mWifi.isConnected()) { 
      Log.d(TAG,"Wifi connected"); 
     } 

     //check gps and wifi availability 
     try{ 
      gps_enabled=locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     }catch(Exception ex){} 

     try{ 
      network_enabled=locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
     }catch(Exception ex){} 

     if(!gps_enabled){ 
      Log.d(TAG,"GPS: Missing"); 
     } 
     if(!network_enabled){ 
      Log.d(TAG,"Network: Missing"); 
     } 

     /* Location change listeners */ 
     try{ 
      // Define a listener that responds to gps location updates 
      locationListenerGPS = new LocationListener() { 
       public void onLocationChanged(Location location) { 
        Log.d(TAG,"GPS: Latitude: " + location.getLatitude() + ", Longitude = " + location.getLongitude()); 
       } 

       public void onStatusChanged(String provider, int status, Bundle extras) {Log.d(TAG,"location found 1");} 

       public void onProviderEnabled(String provider) {Log.d(TAG,"location found 2");} 

       public void onProviderDisabled(String provider) {Log.d(TAG,"location found 3");} 
      }; 

      locationManager.requestLocationUpdates(locationProviderGPS, 0, 0, locationListenerGPS); 
     }catch(Exception e){ 
      Log.e(TAG, "Location Exception: " + e.getMessage()); 
     } 

     try{ 
      // Define a listener that responds to wifi location updates 
      locationListenerNetwork = new LocationListener() { 
       public void onLocationChanged(Location location) { 
        Log.d(TAG,"NW: Latitude: " + location.getLatitude() + ", Longitude = " + location.getLongitude()); 
       } 

       public void onStatusChanged(String provider, int status, Bundle extras) {Log.d(TAG,"location found 1");} 

       public void onProviderEnabled(String provider) {Log.d(TAG,"location found 2");} 

       public void onProviderDisabled(String provider) {Log.d(TAG,"location found 3");} 
      }; 

      locationManager.requestLocationUpdates(locationProviderWifi, 0, 0, locationListenerNetwork); 
     }catch(Exception e){ 
      Log.e(TAG, "Location Exception: " + e.getMessage()); 
     } 
    } 
} 

그리고 로그 캣 출력 :

: 매니페스트 파일에

02-02 18:09:27.009: D/LocationServices(3972): Wifi connected 
02-02 18:09:27.009: D/LocationServices(3972): GPS: Missing 
02-02 18:09:27.009: D/LocationServices(3972): Network: Missing 
02-02 18:09:27.016: E/LocationServices(3972): Location Exception: provider doesn't exist: gps 
02-02 18:09:27.016: E/LocationServices(3972): Location Exception: provider doesn't exist: network 

권한

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

이 구성에서 위치를 결정할 여지가 있습니까?

답변

3

공개 IP 주소 조회를 기반으로 지리적 위치를 제공 할 일부 웹 서비스를 찾으실 수 있습니다. 정확도는 네트워킹 설정 (예 : VPN), ISP 등등에 따라 "올바른 도시"에서 "올바른 행성"까지 다양합니다.

+0

따라서 Android에서만 LocationManager를 사용하여 위치를 가져올 수 있습니까? 와이파이? – kaushal

+0

@ rockford98 : 하드웨어에서 제조업체는 LogCat 출력에 따라 표준 위치 소스를 지원하지 않습니다. 제조업체에 연락하여 무엇을해야하는지 물어보십시오. 제조업체와 대화 할 의사가 없거나 대화 할 수없는 경우 브라우저 스타일의 IP 주소 조회 기술을 사용하거나 위치 데이터를 철저히 사용하지 않는 방법으로 제한됩니다. – CommonsWare

+0

이 이해되었습니다. Android 기기에서 Wi-Fi에서만 위치 정보를 가져 오는 것이 가능하다면 일반적으로 이해하고 싶었습니다. 나는 그렇지 않다. 지리적 위치가 유일한 방법 인 것 같습니다. 감사. – kaushal