2016-11-30 40 views
1

嘗試如下面的代碼這樣簡單的事情,似乎不工作:獲取用戶位置的緯度經度與API 22

我總是在日誌中獲取的「無位置:(」

我失去的東西?

public class MainActivity extends AppCompatActivity implements LocationListener { 

LocationManager locationManager; 
String provider; 

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

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

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

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     return; 
    } 
    Location location = locationManager.getLastKnownLocation(provider); 

    if(location != null){ 
     Log.i("Location","Location achieved"); 
    }else{ 
     Log.i("Location","No location :("); 
    } 
} 
+1

如果沒有最後已知位置? –

+0

你想要完整的代碼嗎? –

+1

'getLastKnownLocation()'如果沒有緩存的位置,將返回'null'。因此,你的行爲是完全正常的。 https://developer.android.com/guide/topics/location/strategies.html – CommonsWare

回答

1

如果您正在運行的模擬器,確保從模擬器設置發送位置的事件。不過,getLastKnownLocation可以隨時返回null。你可以使用LocationManager#requestLocationUpdates聽任何位置變化inste廣告。

+0

謝謝你的工作。這些設置位於手機模擬器的右側。圖標右側的導航欄位於底部,有三個點。 –

2
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
中的onCreate()

 new GoogleApiClient.Builder(context) 
     .addApi(LocationServices.API) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .build() 

在活動總代碼:

public class MainActivity extends ActionBarActivity implements 
      ConnectionCallbacks, OnConnectionFailedListener, LocationListener { 
     @Override 
    public void onConnected(Bundle connectionHint) { 

    if (mRequestingLocationUpdates) { 
     startLocationUpdates(); 
    } 
} 

protected void startLocationUpdates() { 
    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mLocationRequest, this); 
} 
     @Override 
     public void onLocationChanged(Location location) { 
      mCurrentLocation = location; 
      mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); 
      updateUI(); 
     } 

     private void updateUI() { 
      mLatitudeTextView.setText(String.valueOf(mCurrentLocation.getLatitude())); 
      mLongitudeTextView.setText(String.valueOf(mCurrentLocation.getLongitude())); 
      mLastUpdateTimeTextView.setText(mLastUpdateTime); 
     } 
@Override 
public void onResume() { 
    super.onResume(); 
    if (mGoogleApiClient.isConnected() && !mRequestingLocationUpdates) { 
     startLocationUpdates(); 
    } 
} 
    } 

即可停止接收更新:

@Override 
protected void onPause() { 
    super.onPause(); 
    stopLocationUpdates(); 
} 

protected void stopLocationUpdates() { 
    LocationServices.FusedLocationApi.removeLocationUpdates(
      mGoogleApiClient, this); 
} 
相關問題