Проверьте этот маленький пример, он должен решить вашу проблему.Пожалуйста, проверьте метод onConnected (), там есть логика, которая вам нужна, я также позволю вам весь код, который заставляет его работать вместе, если вам нужно:
package current_location_to_firebase.mytrendin.com.currentlocation;
import android.location.Location;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.firebase.FirebaseApp;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
public class MainActivity extends AppCompatActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
private static final String TAG = "CurrentLocationApp";
private GoogleApiClient mGoogleApiClient;
private Location mLastLocation;
private TextView mLatitudeText;
private TextView mLongitudeText;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mLocationDatabaseReference;
Button saveLocationToFirebase;
String value_lat = null;
String value_lng=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FirebaseApp.initializeApp(this);
mFirebaseDatabase = FirebaseDatabase.getInstance();
mLocationDatabaseReference= mFirebaseDatabase.getReference().child("my current location");
mLatitudeText = (TextView) findViewById((R.id.latitude_text));
mLongitudeText = (TextView) findViewById((R.id.longitude_text));
saveLocationToFirebase=(Button)findViewById(R.id.save_location);
buildGoogleApiClient();
}
protected synchronized void buildGoogleApiClient() {
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();
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
}
@Override
public void onConnected(Bundle connectionHint) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null) {
value_lat= String.valueOf(mLastLocation.getLatitude());
value_lng =String.valueOf(mLastLocation.getLongitude());
mLatitudeText.setText(value_lat);
mLongitudeText.setText(value_lng);
saveLocationToFirebase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mLocationDatabaseReference.push().setValue("Latitude : "+value_lat +" & Longitude : "+value_lng);
Toast.makeText(MainActivity.this ,"Location saved to the Firebasedatabase",Toast.LENGTH_LONG).show();
}
});
}
}
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = " + result.getErrorCode());
}
@Override
public void onConnectionSuspended(int cause) {
Log.i(TAG, "Connection suspended");
mGoogleApiClient.connect();
}
}
Запомните в правилах вашей базы данных, чтобы установить его в trueесли им присвоено значение false, чтобы только авторизованные пользователи могли публиковать в нем сообщения
saveLocationToFirebase - это кнопка, которая должна быть инициализирована в вашемXML, поэтому, когда мы щелкаем по нему, вы обновляете значения в базе данных, если вы хотите, чтобы они делали это самостоятельно, присоединяйте слушателя к широте и долготе, поэтому, когда они изменятся, он предложит загрузить в базу данных.