Android LocationListener没有点击onLocationChanged

时间:2017-08-21 08:08:01

标签: android gps locationmanager locationlistener

我有一个名为GPStracker的类,它实现了LocationListener接口。

public class GPSTracker implements LocationListener {
    Context context;
    LocationManager lm;

在构造函数中,我设置了LocationManager和一些设置(我省略了权限部分):

public GPSTracker(Context c) {
    context = c;

    ... (Permission checking)

    lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    boolean isGPSEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    if(isGPSEnabled){
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 5, this);
    } else {
        Toast.makeText(context, "Please enable GPS", Toast.LENGTH_SHORT).show();
    }
}

在清单文件中,我设置了有关GPS的这些权限:

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

我有一些被覆盖的方法,其中只有一个具有一些功能,onLocationChanged方法:

@Override
public void onLocationChanged(Location location) {
    InspectieOverzicht activity = (InspectieOverzicht) context;
    activity.getFirstFragment().updateDistance(location);
}

我在活动中创建了一个新的GPSTracker对象。

g = new GPSTracker(this);

我希望这能奏效。它将要求使用GPS的权限,我在顶部看到GPS图标,因此它正在使用GPS。但是永远不会调用onLocationChanged方法。

我甚至试过在我所在的建筑物上上下走动(也许它确实需要改变),但这也没有用。

我在虚拟设备上尝试过更改GPS位置,就像魅力一样。它正在立即更新我的活动。

我已经在API 19,23和26(仿真设备上)上尝试过这一切。我已经在实际设备上的API 23上尝试了它,但似乎没有用。

有谁知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

如果GPS_PROVIDER不起作用,

有时使用网络提供坐标

  locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, mylistener);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, mylistener);