Я использую API Google Fused Location Provider для обновления местоположения моего приложения, но оно получило то же местоположение, хотя я переместил устройство, когда получил значение. Пожалуйста, помогите мне найти мою ошибку?
Я использую кнопку в ExpandableListAdapter. Когда пользователь нажимает кнопку там. Мое приложение получает местоположение и хранится в моей базе данных. Я пытался разместить LocationCallback где-нибудь в своей деятельности, однако это не изменилось.
Моя активность:
public class IndexActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
String UserId;
ExpandableListView mExpandableListView;
List<Customer> info;
List<MetterChangeLog> log;
private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
private LocationSettingsRequest.Builder builder;
private PendingResult<LocationSettingsResult> result;
private final int REQUEST_LOCATION = 200;
private final int REQUEST_CHECK_SETTINGS = 300;
private Location mLastLocation;
FusedLocationProviderClient mFusedLocationClient;
private LocationCallback mLocationCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
try {
GetMetterChangeLogTask mytt = new GetMetterChangeLogTask(IndexActivity.this);
mytt.execute();
log = mytt.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(120000); // two minute interval
mLocationRequest.setFastestInterval(120000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
/*if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}*/
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
for (Location location : locationResult.getLocations()) {
mLastLocation = location;
}
};
};
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addOnConnectionFailedListener(this)
.addConnectionCallbacks(this)
.addApi(LocationServices.API)
.build();
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onResume() {
super.onResume();
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
for (Location location : locationResult.getLocations()) {
mLastLocation = location;
}
};
};
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mFusedLocationClient.requestLocationUpdates(mLocationRequest,
mLocationCallback,
Looper.getMainLooper());
}
}
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
@Override
public void onConnected(@Nullable Bundle bundle) {
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(2000);
mLocationRequest.setFastestInterval(2000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, null);
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
public void onLocationChanged(Location location) {
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
for (Location location : locationResult.getLocations()) {
mLastLocation = location;
}
};
};
}
Затем я получаю mLastLocation для intital ExpandableListView следующим образом
mExpandableListView = (ExpandableListView) findViewById(R.id.list_customer);
ExpandableListAdapter adapter = new ExpandableListAdapter(IndexActivity.this,
mExpandableListView, info, SoDoc.substring(0, 1), mLastLocation);
mExpandableListView.setItemsCanFocus(true);
mExpandableListView.setAdapter(adapter);
В классе ExpandableListAdapter я создаю держатель с кнопкой отправки, чтобы получить местоположение.
groupHolder.submit.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
//button functionalty ...
...
final Customer index = new Customer();
index.setLong(mLastlocation.getLongitude());
index.setLat(mLastlocation.getLatitude());
...
}
Я пытался получить местоположение в 3 местах и получить то же значение. Пожалуйста, помогите мне найти мою ошибку. Извините, мой английский не очень хороший.
Спасибо за поддержку.