【问题标题】:detecting location by wifi/mobile networks通过 wifi/移动网络检测位置
【发布时间】:2015-03-24 19:38:18
【问题描述】:

我有这个用于检测位置的代码:

public class LocationDetector implements LocationListener{
    private LocationManager locationManager;
    private String provider;
    private Location lastloc;
    private Context _context;

    public LocationDetector(Context context){
        _context = context;
    }

    public Location getlastloc(){
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        Location location = locationManager.getLastKnownLocation(provider);
        return location;
    }

    public void start(){
        locationManager = (LocationManager) _context.getSystemService(Context.LOCATION_SERVICE);
        lastloc = getlastloc();
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 400, 1, (LocationListener) this);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 400, 1, (LocationListener) this);
    }

    public void stop(){
        locationManager.removeUpdates((LocationListener) this);
    }

    @Override
    public void onLocationChanged(Location location) {
        Log.d("states", "onLocationChanged()");
        lastloc = location;
        Log.d("states", "lat: "+lastloc.getLatitude()+"lat: "+lastloc.getLongitude());
    }

    @Override
    public void onProviderDisabled(String arg0) {
    }

    @Override
    public void onProviderEnabled(String arg0) {
    }

    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    }
}

问题是 onLocationChanged() 仅在手机上启用 gps 选项且仅启用 wifi/移动网络选项时才会触发 onLocationChanged() 不会触发并且不会检测位置。

即使我连接到互联网并且启用了 wifi/移动网络选项,也不会再次检测位置。

所以这个选项是干什么用的?什么时候起作用?

【问题讨论】:

  • 我认为您可能将更新请求设置得过大。尝试使用小于 400 的值。
  • 我现在改成 0 还是不给我位置

标签: android gps location


【解决方案1】:

我看到你正在使用

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 400, 1, (LocationListener) this);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 400, 1, (LocationListener) this);

首先,您请求从网络提供商处获取更新,然后再次请求从 GPS 提供商处获取更新。因此,您只能从 GPS 提供商处获得更新。您需要添加以下条件以满足您的要求。

//if condition to check if GPS is available  
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 400, 1, (LocationListener) this);
                    }  
       else if (mlocManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {  
                       locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 400, 1, (LocationListener) this);
                    }  

【讨论】:

    【解决方案2】:

    您应该检查需要哪些权限的清单文件。 根据文档,当同时使用 gps 和网络提供商时,您应该定义 access_fine_location,其中包括两者的权限。

    查看您的标准,当设置空标准时,您不会得到任何更新。

    http://developer.android.com/reference/android/location/Criteria.html

    【讨论】:

    • 我在 getlastloc() 方法中使用了标准,这是一个可选方法,我不能使用它。我的问题是我无法通过 wifi/移动网络获取任何位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多