Android 有没有办法得到隧道中的当前位置

Android 有没有办法得到隧道中的当前位置,android,geolocation,Android,Geolocation,我正在尝试获取当前位置,大多数情况下代码都有效。但是位置更新在隧道中无法工作,尽管移动接收出现了问题 我尝试并追踪了以下两种方法: Location NetLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); Location GPSLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVI

我正在尝试获取当前位置,大多数情况下代码都有效。但是位置更新在隧道中无法工作,尽管移动接收出现了问题

我尝试并追踪了以下两种方法:

  Location NetLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
  Location GPSLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
这两种情况在隧道中似乎都没有更新。我与其他一些应用程序进行了交叉检查,发现谷歌地图上的定位服务工作正常


那么,我有没有办法在隧道中获得正确的位置更新呢?

谷歌有一个新的API,名为fusedLocationAPI,你可以尝试使用它。这是示例代码-


这只是对可以做什么的更高层次的概述。可以通过添加位置更新间隔等进一步定制代码。您可以参考此网站了解更多信息。

您的意思是隧道中没有GPS接收吗?确实没有。@greenapps我知道隧道里没有GPS信号,但是谷歌地图在隧道里得到了正确的位置信息,所以一定有办法找到正确的位置。问题是,该API是否可用于其他应用程序?谷歌地图是否可以获得正确的位置信息?谁的?毫无意义。请详细说明你的意思。例如,基站三角测量就是一种方法。有很多方法可以做到这一点,而这正是我试图找到的。这与谷歌地图有什么关系?你为什么不要求对移动台进行三角测量呢?
public class YourActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener  {

private GoogleApiClient mGoogleApiClient;
private Location mLastLocation;

private static final int LOCATION_PERMISSION_CODE = 42;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_splash_screen);
    initGoogleApiClient();
}

@Override
public void onConnected(@Nullable Bundle bundle) {

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_CODE);
    } else {
        getLastKnownLocation();
    }
}

@Override
public void onConnectionSuspended(int i) {
    mGoogleApiClient.connect();
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == LOCATION_PERMISSION_CODE) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            getLastKnownLocation();
        } else {
            startLocationActivity();
        }
    }
}

private void getLastKnownLocation() {
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}

private void initGoogleApiClient() {
    if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }
}

@Override
protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
}

@Override
protected void onStop() {
    super.onStop();
    mGoogleApiClient.disconnect();
}
}