Advertisement
Guest User

Firebase Location

a guest
Feb 16th, 2017
475
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.17 KB | None | 0 0
  1. package com.yourcomapany.yourpackagename;
  2.  
  3. import android.content.Intent;
  4. import android.content.pm.PackageManager;
  5. import android.location.Location;
  6. import android.location.LocationListener;
  7. import android.location.LocationManager;
  8. import android.os.Handler;
  9. import android.os.Looper;
  10. import android.support.annotation.NonNull;
  11. import android.support.v4.app.FragmentActivity;
  12. import android.os.Bundle;
  13. import com.google.android.gms.auth.api.Auth;
  14. import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
  15. import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
  16. import com.google.android.gms.auth.api.signin.GoogleSignInResult;
  17. import com.google.android.gms.common.ConnectionResult;
  18. import com.google.android.gms.common.Scopes;
  19. import com.google.android.gms.common.api.GoogleApiClient;
  20. import com.google.android.gms.common.api.Scope;
  21. import com.google.android.gms.maps.CameraUpdateFactory;
  22. import com.google.android.gms.maps.GoogleMap;
  23. import com.google.android.gms.maps.OnMapReadyCallback;
  24. import com.google.android.gms.maps.SupportMapFragment;
  25. import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  26. import com.google.android.gms.maps.model.CameraPosition;
  27. import com.google.android.gms.maps.model.CircleOptions;
  28. import com.google.android.gms.maps.model.LatLng;
  29. import com.google.android.gms.maps.model.Marker;
  30. import com.google.android.gms.maps.model.MarkerOptions;
  31. import com.google.android.gms.tasks.OnCompleteListener;
  32. import com.google.android.gms.tasks.Task;
  33. import com.google.firebase.auth.AuthCredential;
  34. import com.google.firebase.auth.AuthResult;
  35. import com.google.firebase.auth.FirebaseAuth;
  36. import com.google.firebase.auth.GoogleAuthProvider;
  37. import com.google.firebase.database.DataSnapshot;
  38. import com.google.firebase.database.DatabaseError;
  39. import com.google.firebase.database.DatabaseReference;
  40. import com.google.firebase.database.FirebaseDatabase;
  41. import com.google.firebase.database.ValueEventListener;
  42. import java.util.WeakHashMap;
  43.  
  44. public class MapsActivity extends FragmentActivity implements OnMapReadyCallback{
  45.  
  46.     public static GoogleMap mMap;
  47.     public double latitude;
  48.     public double longitude;
  49.     public static DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
  50.     GoogleSignInOptions gso;
  51.     GoogleApiClient mGoogleApiClient;
  52.     private FirebaseAuth mAuth;
  53.     public static boolean auth = false;
  54.     Runnable updateRunnable;
  55.     WeakHashMap<Marker,String> mMarkers;
  56.     LatLng latLng;
  57.     float[][] friendPositions = new float[50][2];
  58.  
  59.     @Override
  60.     protected void onCreate(Bundle savedInstanceState) {
  61.         super.onCreate(savedInstanceState);
  62.         setContentView(R.layout.activity_maps);
  63.         mMarkers = new WeakHashMap<>();
  64.         mAuth = FirebaseAuth.getInstance();
  65.  
  66.         gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
  67.                 .requestScopes(new Scope(Scopes.PLUS_LOGIN))
  68.                 .requestIdToken(getString(R.string.default_web_client_id))
  69.                 .requestEmail()
  70.                 .build();
  71.  
  72.         mGoogleApiClient = new GoogleApiClient.Builder(this)
  73.                 .enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {
  74.                     @Override
  75.                     public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {}
  76.                 })
  77.                 .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
  78.                 .build();
  79.  
  80.         Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
  81.         startActivityForResult(signInIntent,1000);
  82.  
  83.         SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
  84.                 .findFragmentById(R.id.map);
  85.         mapFragment.getMapAsync(this);
  86.  
  87.         LocationManager locationManager = (LocationManager) MapsActivity.this.getSystemService(LOCATION_SERVICE);
  88.         LocationListener locationListener = new LocationListener() {
  89.             @Override
  90.             public void onLocationChanged(Location location) {
  91.                 latitude = location.getLatitude();
  92.                 longitude = location.getLongitude();
  93.             }
  94.  
  95.             @Override
  96.             public void onStatusChanged(String s, int i, Bundle bundle) {
  97.  
  98.             }
  99.  
  100.             @Override
  101.             public void onProviderEnabled(String s) {
  102.  
  103.             }
  104.  
  105.             @Override
  106.             public void onProviderDisabled(String s) {
  107.  
  108.             }
  109.         };
  110.  
  111.         if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
  112.             if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {}
  113.                 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
  114.         }else if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
  115.             if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {}
  116.                 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener);
  117.         }
  118.  
  119.         final Handler handler = new Handler(Looper.getMainLooper());
  120.         updateRunnable = new Runnable() {
  121.             @Override
  122.             public void run() {
  123.                 updateMap();
  124.                 handler.postDelayed(this,700);
  125.             }
  126.         };
  127.     }
  128.  
  129.     public void updateMap() {
  130.         if(auth){
  131.             try {
  132.                 mRootRef.child("Player"+playerId).child("Latitude").setValue(latitude);
  133.                 mRootRef.child("Player"+playerId).child("Longitude").setValue(longitude);
  134.             }catch (Exception e){e.printStackTrace();}
  135.         }
  136.         latLng = new LatLng(latitude, longitude);
  137.         mMap.clear();
  138.         if(auth && longitude != 0 && latitude != 0){
  139.             for (int i = 0; i < friendPositions.length; i++) {
  140.                 try {
  141.                     if(friendPositions[i][0] != 1 || friendPositions[i][0] != 0){
  142.                         if(friendPositions[i][1] != 1 || friendPositions[i][1] != 0) {
  143.                             Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(friendPositions[i][0], friendPositions[i][1])).title("" + mFriends[i]).icon(BitmapDescriptorFactory.fromBitmap(myBitmaps[i])));
  144.                             mMarkers.put(marker, mFriends[i]);
  145.                         }
  146.                     }
  147.                 }catch (Exception e){e.printStackTrace();}
  148.             }
  149.         }
  150.     }
  151.  
  152.     @Override
  153.     public void onMapReady(GoogleMap googleMap) {
  154.         mMap = googleMap;
  155.         mMap.getUiSettings().setAllGesturesEnabled(false);
  156.         mMap.getUiSettings().setZoomGesturesEnabled(true);
  157.         mMap.getUiSettings().setCompassEnabled(false);
  158.         mMap.getUiSettings().setMyLocationButtonEnabled(true);
  159.         mMap.getUiSettings().setMapToolbarEnabled(true);
  160.         updateRunnable.run();
  161.     }
  162.  
  163.     @Override
  164.     protected void onStart() {
  165.         super.onStart();
  166.         for (int i = 0; i < friendList.length; i++){
  167.             final int finalI = i;
  168.             mRootRef.child("Player"+friendList[i]).child("Latitude").addValueEventListener(new ValueEventListener() {
  169.                 @Override
  170.                 public void onDataChange(DataSnapshot dataSnapshot) {
  171.                     try {
  172.                         friendPositions[finalI][0] = (double) dataSnapshot.getValue();
  173.                     }catch (Exception e){e.printStackTrace();}
  174.                 }
  175.  
  176.                 @Override
  177.                 public void onCancelled(DatabaseError databaseError) {}
  178.             });
  179.             mRootRef.child("Player"+friendList[i]).child("Longitude").addValueEventListener(new ValueEventListener() {
  180.                 @Override
  181.                 public void onDataChange(DataSnapshot dataSnapshot) {
  182.                     try {
  183.                         friendPositions[finalI][1] = (double) dataSnapshot.getValue();
  184.                     }catch (Exception e){e.printStackTrace();}
  185.                 }
  186.  
  187.                 @Override
  188.                 public void onCancelled(DatabaseError databaseError) {}
  189.             });
  190.         }
  191.     }
  192.  
  193.     @Override
  194.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  195.         super.onActivityResult(requestCode, resultCode, data);
  196.         if(requestCode == 1000){
  197.             GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
  198.             if(result.isSuccess()){
  199.                 GoogleSignInAccount account = result.getSignInAccount();
  200.                 firebaseAuthWithGoogle(account);
  201.             }
  202.         }
  203.     }
  204.  
  205.     private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
  206.         playerId = ""+acct.getId();
  207.         AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
  208.         mAuth.signInWithCredential(credential)
  209.                 .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
  210.                     @Override
  211.                     public void onComplete(@NonNull Task<AuthResult> task) {
  212.                         auth = true;
  213.                     }
  214.                 });
  215.     }
  216.  
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement