Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓谷歌地图API全球定位系统的位置正在改变,即使设备在同一个地方_Android_Google Maps_Gps_Locationlistener - Fatal编程技术网

Android 安卓谷歌地图API全球定位系统的位置正在改变,即使设备在同一个地方

Android 安卓谷歌地图API全球定位系统的位置正在改变,即使设备在同一个地方,android,google-maps,gps,locationlistener,Android,Google Maps,Gps,Locationlistener,我正在为我的应用程序使用谷歌地图API。即使设备在同一位置,我的GPS位置也在变化,据说每6秒更新一次位置,因此它会不断更新,但每次更新时它也会移动一点,有时会移动很多。我的代码如下。我还将添加屏幕截图 package b.a.location_tracker; import android.graphics.Color; import android.location.Location; import android.support.v4.app.FragmentActivity; impo

我正在为我的应用程序使用谷歌地图API。即使设备在同一位置,我的GPS位置也在变化,据说每6秒更新一次位置,因此它会不断更新,但每次更新时它也会移动一点,有时会移动很多。我的代码如下。我还将添加屏幕截图

package b.a.location_tracker;

import android.graphics.Color;
import android.location.Location;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;


public class Map extends FragmentActivity implements OnMapReadyCallback, LocationListener, GoogleApiClient.ConnectionCallbacks {

private GoogleMap mMap;
Marker m;
private GoogleApiClient mGoogleApiClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);

    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    this.buildGoogleApiClient();

    mGoogleApiClient.connect();

}

private synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this).addApi(LocationServices.API)
            .build();
}

@Override
public void onMapReady(GoogleMap googleMap) {

    mMap = googleMap;
    LatLng sydney = new LatLng(28.6139, 77.2090);
    m=mMap.addMarker(new MarkerOptions().position(sydney).title("Delhi City"));
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 20));
}

@Override
public void onConnected(Bundle bundle) {
    LocationRequest mLocationRequest = createLocationRequest();
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, (LocationListener) this);

}

@Override
public void onConnectionSuspended(int i) {
    Log.d("TAG", "Connection to Google API suspended");

}

private LocationRequest createLocationRequest() {
    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(6000);
    mLocationRequest.setFastestInterval(1000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    return mLocationRequest;
}

    @Override
public void onLocationChanged(Location location) {

    LatLng sydney = new LatLng(location.getLatitude(), location.getLongitude());
        LatLng a=m.getPosition();
        m.remove();
        m=mMap.addMarker(new MarkerOptions().position(sydney).title("Your Location"));
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, mMap.getCameraPosition().zoom));
        Polyline line = mMap.addPolyline(new PolylineOptions().add(a,sydney).width(5).color(Color.RED));

}
}

请记住我的手机在同一个地方,因此它不应该移动


有时由于设置精度较低,会从Wifi网络接收数据。选中android手机上的设置/位置/使用无线网络复选框。

从代码中删除以下两行:

mLocationRequest.setInterval(6000);
mLocationRequest.setFastestInterval(1000);

您是否尝试将minDisplacementDistance添加到您的位置请求中

private LocationRequest createLocationRequest() {
    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(6000);
    mLocationRequest.setFastestInterval(1000);
    mLocationRequest.setSmallestDisplacement(200); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    return mLocationRequest;
} 
如果您将设置此参数(默认值为0),则如果GPS查找的新位置位于previus查找位置的200米半径内,则不会每次调用on Location Changed listener


现在,每6秒调用一次onLocationChange侦听器,最小距离等于0。因为GPS不是100%正确的,你会得到很多不同的位置。将smallestDisplacement更改为higher后,将不再经常调用该函数

您是否尝试过
mlLocationRequest.setPriority(位置请求.优先级\u平衡\u功率\u精度)

当我使用
LocationRequest.PRIORITY\u HIGH\u precision
时,Gps总是在建筑物中使用并不断变化。我改变了准确度,然后位置的变化小于

你可以看看这个:

/*
    Priority                update interval      Battery drain per hour (%)     Accuracy
    HIGH_ACCURACY           5 seconds                   7.25%                   ~10 meters
    BALANCED_POWER          20 seconds                  0.6%                    ~40 meters
    NO_POWER                N/A                         small                   ~1 mile

*/
并使用:

public static void createLocationRequest() {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(UPDATE_INTERVAL);
    mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    mLocationRequest.setSmallestDisplacement(DISPLACEMENT);
}

private static int UPDATE_INTERVAL = 20000; // 20 second
private static int FASTEST_INTERVAL = 10000; // 10 second
private static int DISPLACEMENT = 50; // minimum change to get location 

此外,如果他/她在一幢大楼里,gps是如此令人困惑,总是在变化。也许有时也会跳过下一栋楼:)@prat嗨,谢谢你的帮助。我会尽力让你知道的。我的手机没有连接到WiFi,我正在使用手机上的数据连接。@Yasin我也这么认为。有没有办法确保位置准确。这将是一个交通应用程序,它将向乘坐交通工具的孩子的父母显示位置,如果显示出如此大的波动,那就不好了。@niharika我将发布一个答案。嗨,谢谢你的帮助。我会试试这个,让你知道,但问题是这只是我尝试制作的应用程序的一部分。其想法是通过服务器将此设备的位置传输到另一个设备,以便它可以查看此设备在其设备上的位置。因此,如果我更改minDisplacementDistance,它不会影响最终的应用程序,因为它应该显示正在穿越的路线。让我知道:)@niharika我正在开发与您描述的相同类型的应用程序。如果你的应用程序是开源的,你有什么方法可以告诉我正确的资源或源代码吗?谢谢,谢谢你的帮助。我会尽力让你知道的。我只是想显示设备是否移动,如果是,则显示路径。这样做会影响想法吗?如中所示,更改是否仍会显示?我尝试过,但现在它没有显示位置的任何更改Whatsoever将尝试此操作。谢谢:)