仅限wifi上的Android位置

仅限wifi上的Android位置,android,gps,location,android-wifi,Android,Gps,Location,Android Wifi,我有一个运行安卓4.4.4的自定义硬件。它有wifi连接,但没有GPS或手机模块。我只需要基于wifi确定位置,但Android似乎不能。在浏览器中访问google.com也会显示“未知”位置。wifi工作正常-浏览互联网等 下面是确定位置的示例类: public class LocationServices { Context mContext; private static final String TAG = LocationServices.class.getSimple

我有一个运行安卓4.4.4的自定义硬件。它有wifi连接,但没有GPS或手机模块。我只需要基于wifi确定位置,但Android似乎不能。在浏览器中访问google.com也会显示“未知”位置。wifi工作正常-浏览互联网等

下面是确定位置的示例类:

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());
        }
    }
}
和logcat输出:

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" />


在此配置中是否仍有确定位置的方法?

欢迎您尝试查找一些基于公共IP地址查找提供地理位置的Web服务。准确度范围从“正确的城镇”到“正确的星球”,具体取决于网络配置(如VPN)、ISP等。

因此,如果您只有wifi,是否无法使用Android中的LocationManager获取位置?@rockford98:在您的硬件上,您的制造商不支持标准位置源,根据您的LogCat输出。欢迎您联系制造商并询问他们该怎么做。如果您不愿意或无法与制造商联系,您的选择仅限于使用浏览器样式的IP地址查找技术,或完全不使用位置数据。明白。我只是想大体上理解一下,如果有可能的话,在Android设备上只能通过wifi获取位置信息。我想不是。看来地理位置是我唯一的选择。谢谢