【问题标题】:requestLocationUpdates for count traveled metersrequestLocationUpdates 计算行驶米数
【发布时间】:2017-04-19 09:00:20
【问题描述】:

更新: 我真正的课程看起来像这样并且它有效(它从 onLocationChange 方法向我敬酒 dis 变量)。但是我无法在 MainActivity 中访问这个变量 - 它总是给我 0.0 - 这个类是否有可能在某个时候破坏这个变量?

public class GPStracker implements LocationListener {

    Context context;
    double plat;
    double plon;
    double clat;
    double clon;

    public double dis;

    public GPStracker(Context c) {
        context = c;
    }

    public Location getlocation() {
        if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(context, "Uprawnienia nie przyznane", Toast.LENGTH_SHORT).show();
        }

        LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        boolean isGPSenabled;
        isGPSenabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);

        if (isGPSenabled) {
            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this);
            Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            return location;
        } else {
            Toast.makeText(context, "Proszę włączyć GPS", Toast.LENGTH_LONG).show();
        }
        return null;
    }

    @Override
    public void onLocationChanged(Location location) {
        clat = location.getLatitude();
        clon = location.getLongitude();
        if (clat != plat || clon != plon) {
            dis += getDistance(plat, plon, clat, clon);
            plat = clat;
            plon = clon;

            setDis(dis);
        }
        Toast.makeText(context, String.valueOf(dis), Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {

    }

    public double getDistance(double lat1, double lon1, double lat2, double lon2) {
        double latA = Math.toRadians(lat1);
        double lonA = Math.toRadians(lon1);
        double latB = Math.toRadians(lat2);
        double lonB = Math.toRadians(lon2);
        double cosAng = (Math.cos(latA) * Math.cos(latB) * Math.cos(lonB - lonA)) +
                (Math.sin(latA) * Math.sin(latB));
        double ang = Math.acos(cosAng);
        double dist = ang * 6371;
        return dist;
    }

    public double getDis() {
        return dis;
    }

    public void setDis(double dis) {
        this.dis = dis;
    }
}

我想问(也许那是一个愚蠢的问题),但我正在尝试使用 gps 提供商计算行程米数。现在我正在考虑以这种方式使用 requestLocationUpdates:

int i;      
      requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this);
and 
    public void onLocationChanged(Location location) {
i++
}

所以根据谷歌的参考资料,它应该自动更新我的 int i 每一新的一米。这是正确的?或者我想错了?这看起来很容易计算行程米,但我不确定它是否有效以及它是否准确......有什么建议吗?

【问题讨论】:

    标签: java android android-gps


    【解决方案1】:

    您应该使用示例: loc1.distanceTo(loc2);

    【讨论】:

      【解决方案2】:

      使用以下代码:

      requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this);
      

      requestLocationUpdates 每 1 秒和 1 米距离被调用一次。因此,您在每次通话中都会获得更新的位置。您可以计算先前位置和新位置之间的距离并将其添加到distance,如下所示以获得总行驶距离。

      你可以比较试试下面的代码:

       Location previousLoc = null;
       float distance = 0;
       boolean firstTime = true;
       publc void onLocationChanged(Location location) {
            if(firstTime){
                previousLoc = location;
                firstTime = false;
            }
            distance += previousLoc.distanceTo(location);
            previousLoc = location;
       }
      

      希望这会有所帮助。

      【讨论】:

      • 为什么一定要使用setDis()?无论如何,dis 的值在onLocationChanged() 中正在发生变化。我建议您在您的活动中实施LocationListener
      • 和 MainActivity 在同一个班级里做?这很奇怪,即使我用你的例子它也会给我 0。
      • 如果你想使用 GPS 跟踪器类,那么你必须在活动中创建一个LocationListener,然后在GPSTracker 中应用它。您还必须从活动中致电requestLocationUpdates。或者您可以使用BroadcastReceiver 通知您的活动您的位置已更改。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多