[英]Can't get my location in the app map
清單中包括:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
活動代碼:
public class ActivityLogin extends AppCompatActivity {
public static LocationManager mLocationManager;
public static MyLocationListener locationListener = new MyLocationListener();
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
ActivityCompat.requestPermissions(ActivityLogin.this,
new String[] {
Manifest.permission.ACCESS_FINE_LOCATION
},
2);
// ...
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case 2:
{
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10 * 1000, 0, locationListener);
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10 * 1000, 0, locationListener);
mLocationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 10 * 1000, 0, locationListener);
}
return;
}
}
}
}
}
public class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
MapsActivity.Mylocation = new LatLng(
location.getLatitude(), location.getLongitude());
}
public void onProviderDisabled(String provider) {
// ...
}
public void onProviderEnabled(String provider) {
// ...
Location location = ActivityLogin.mLocationManager
.getLastKnownLocation(provider);
if (location != null) {
MapsActivity.Mylocation = new LatLng(
location.getLatitude(), location.getLongitude());
}
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// ...
}
}
結果,不會發生onLocationChanged
事件。 如果我關閉wifi然后再打開, onProviderEnabled
發生onProviderEnabled
事件,並且ActivityLogin.mLocationManager.getLastKnownLocation(provider)
返回null
。
最后,我無法獲取坐標。
過去我在locationListener上遇到麻煩,而讓它起作用的唯一方法是在mainActivity中實現LocationListener,本地或無提示locationlistener都將無法工作。
例如
public class ActivityLogin extends AppCompatActivity implements LocationListener
也就是說,Google棄用了locationListener並將其替換為Google location API。 這將融合的LocationAPI與GoogleApiClient一起使用。
在您的onCreate中,您應該有類似
GoogleApiClient api_client;
api_client = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
在您的onConnected方法中,您應該有類似
location = LocationServices.FusedLocationApi.getLastLocation(api_client);
我不認為這是一種改進,但是Google強迫我們這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.