簡體   English   中英

getLastKnownLocation不斷返回null

[英]getLastKnownLocation keeps returning null

我知道有人問過這個問題,我嘗試了一些答案,但這對我不起作用。

我已經為兩個定位服務都添加了權限,但它會永久返回null。

這是我的Java代碼

provider = locationManager.getBestProvider(new Criteria(), false);

您為enabledOnly參數提供了false ,因此它可能返回未啟用的提供程序。 然后,由javadocs獲取getLastKnownLocation ,它將返回null:“如果提供程序當前被禁用,則返回null。”

可以使用FusedLocationApi代替位置管理器。

代碼示例在這里

   protected synchronized void buildGoogleApiClient() {
    //  Toast.makeText(getContext(), "buildGoogleApiClient", Toast.LENGTH_SHORT).show();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
}

@Override
public void onConnected(@Nullable Bundle bundle) {
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.


        return;
    }
    Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
    if (mLastLocation != null) {
        //place marker at current position
        // Log.e("x", mLastLocation.getLongitude() + "");
        //Log.e("y", mLastLocation.getLatitude() + "");
        currentLocation = mLastLocation;


    }

    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(5000); //5 seconds
    mLocationRequest.setFastestInterval(5000); //3 seconds
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    mLocationRequest.setSmallestDisplacement(50F); //1/10 meter

    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}

@Override
public void onConnectionSuspended(int i) {

}

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

}

@Override
public void onLocationChanged(Location location) {

    currentLocation = location;

}

您需要的參數

 private GoogleApiClient mGoogleApiClient;
 private Location currentLocation;

並在活動或片段onCreateMethode()上調用buildGoogleApiClient

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM