SuruDeveloper

unable to cast

Nov 25th, 2017
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.90 KB | None | 0 0
  1. package com.example.surajnath.taproute;
  2.  
  3. import android.Manifest;
  4. import android.content.pm.PackageManager;
  5. import android.location.Location;
  6. import android.location.LocationListener;
  7. import android.os.Handler;
  8. import android.os.SystemClock;
  9. import android.support.annotation.NonNull;
  10. import android.support.annotation.Nullable;
  11. import android.support.design.widget.Snackbar;
  12. import android.support.v4.app.ActivityCompat;
  13. import android.support.v4.app.FragmentActivity;
  14. import android.os.Bundle;
  15. import android.util.Log;
  16. import android.view.animation.Interpolator;
  17. import android.view.animation.LinearInterpolator;
  18. import android.widget.Toast;
  19.  
  20. import com.firebase.geofire.GeoFire;
  21. import com.firebase.geofire.GeoLocation;
  22. import com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch;
  23. import com.google.android.gms.common.ConnectionResult;
  24. import com.google.android.gms.common.GooglePlayServicesUtil;
  25. import com.google.android.gms.common.api.GoogleApiClient;
  26. import com.google.android.gms.location.LocationRequest;
  27. import com.google.android.gms.location.LocationServices;
  28. import com.google.android.gms.maps.CameraUpdateFactory;
  29. import com.google.android.gms.maps.GoogleMap;
  30. import com.google.android.gms.maps.OnMapReadyCallback;
  31. import com.google.android.gms.maps.SupportMapFragment;
  32. import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  33. import com.google.android.gms.maps.model.LatLng;
  34. import com.google.android.gms.maps.model.Marker;
  35. import com.google.android.gms.maps.model.MarkerOptions;
  36. import com.google.firebase.auth.FirebaseAuth;
  37.  
  38. import com.google.firebase.database.DatabaseError;
  39. import com.google.firebase.database.DatabaseReference;
  40. import com.google.firebase.database.FirebaseDatabase;
  41.  
  42. public class UserLocation extends FragmentActivity implements OnMapReadyCallback ,
  43. GoogleApiClient.ConnectionCallbacks,
  44. GoogleApiClient.OnConnectionFailedListener,
  45. LocationListener{
  46.  
  47. private GoogleMap mMap;
  48.  
  49. private static final int MY_PERMISSION_REQUEST_CODE= 7000;
  50. private static final int PLAY_SERVICE_RES_REQUEST= 7001;
  51.  
  52. private LocationRequest mlocationRequest;
  53. private GoogleApiClient mGoogleAPiClient;
  54. private Location mLastLocation;
  55.  
  56. private static int UPDATE_INTERVAL = 5000;
  57. private static int LATEST_INTERVAL = 3000;
  58. private static int DISPLACEMENT = 10;
  59.  
  60. DatabaseReference drivers;
  61. GeoFire geoFire;
  62.  
  63. Marker mCurrentUser;
  64. MaterialAnimatedSwitch location_switch;
  65. SupportMapFragment mapFragment;
  66.  
  67. @Override
  68. protected void onCreate(Bundle savedInstanceState) {
  69. super.onCreate(savedInstanceState);
  70. setContentView(R.layout.activity_user_location);
  71. // Obtain the SupportMapFragment and get notified when the map is ready to be used.
  72. mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
  73. mapFragment.getMapAsync(this);
  74.  
  75. location_switch = findViewById(R.id.location_switch);
  76. location_switch.setOnCheckedChangeListener(new MaterialAnimatedSwitch.OnCheckedChangeListener() {
  77. @Override
  78. public void onCheckedChanged(boolean isOnline) {
  79.  
  80. if(isOnline){
  81. startLocationUpdate();
  82. displayLocaion();
  83. Snackbar.make(mapFragment.getView(),"You are online", Snackbar.LENGTH_SHORT).show();
  84. }else
  85. {
  86. stopLocationUpdates();
  87. mCurrentUser.remove();
  88. Snackbar.make(mapFragment.getView(),"You are offline", Snackbar.LENGTH_SHORT).show();
  89. }
  90.  
  91. }
  92. });
  93.  
  94. drivers = FirebaseDatabase.getInstance().getReference("Drivers");
  95. geoFire = new GeoFire(drivers);
  96.  
  97. setUpLocation();
  98. }
  99.  
  100. private void setUpLocation() {
  101. if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED &&
  102. ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED )
  103. {
  104. ActivityCompat.requestPermissions(this , new String[]{
  105. Manifest.permission.ACCESS_COARSE_LOCATION,
  106. Manifest.permission.ACCESS_FINE_LOCATION
  107. },MY_PERMISSION_REQUEST_CODE);
  108. }
  109. else
  110. {
  111. if(checkPlayServices()){
  112. buildGoogleApiCLient();
  113. createLocationRequest();
  114. if(location_switch.isChecked())
  115. displayLocaion();
  116.  
  117. }
  118. }
  119. }
  120.  
  121. private void createLocationRequest() {
  122. mlocationRequest = new LocationRequest();
  123. mlocationRequest.setInterval(UPDATE_INTERVAL);
  124. mlocationRequest.setFastestInterval(LATEST_INTERVAL);
  125. mlocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
  126. mlocationRequest.setSmallestDisplacement(DISPLACEMENT);
  127.  
  128. }
  129.  
  130. private void buildGoogleApiCLient() {
  131. mGoogleAPiClient = new GoogleApiClient.Builder(this)
  132. .addConnectionCallbacks(this)
  133. .addOnConnectionFailedListener(this)
  134. .addApi(LocationServices.API)
  135. .build();
  136. mGoogleAPiClient.connect();
  137. }
  138.  
  139. private boolean checkPlayServices() {
  140. int resultcode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
  141. if (resultcode != ConnectionResult.SUCCESS){
  142. if(GooglePlayServicesUtil.isUserRecoverableError(resultcode)){
  143. GooglePlayServicesUtil.getErrorDialog(resultcode,this,PLAY_SERVICE_RES_REQUEST).show();
  144. }else
  145. {
  146. Toast.makeText(this,"The device is not supported",Toast.LENGTH_LONG).show();
  147. finish();
  148. }
  149. return false;
  150. }
  151. return true;
  152. }
  153.  
  154. private void stopLocationUpdates() {
  155. if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED &&
  156. ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED )
  157. {
  158. return;
  159. }
  160.  
  161. LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleAPiClient, (com.google.android.gms.location.LocationListener) this);
  162. }
  163.  
  164. @Override
  165. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  166. switch (requestCode) {
  167. case MY_PERMISSION_REQUEST_CODE :
  168. if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  169. if (checkPlayServices()) {
  170. buildGoogleApiCLient();
  171. createLocationRequest();
  172. if (location_switch.isChecked())
  173. displayLocaion();
  174.  
  175. }
  176. }
  177. }
  178.  
  179. }
  180.  
  181. private void displayLocaion() {
  182. if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED &&
  183. ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED )
  184. {
  185. return;
  186. }
  187.  
  188. mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleAPiClient);
  189. if(mLastLocation !=null){
  190. if(location_switch.isChecked()){
  191. final double latitude = (double) mLastLocation.getLatitude();
  192. final double longitude = (double) mLastLocation.getLongitude();
  193.  
  194.  
  195.  
  196. geoFire.setLocation(FirebaseAuth.getInstance().getCurrentUser().getUid(), new GeoLocation(latitude, longitude), new GeoFire.CompletionListener() {
  197. @Override
  198. public void onComplete(String key, DatabaseError error) {
  199. if(mCurrentUser != null)
  200. mCurrentUser.remove();
  201. mCurrentUser = mMap.addMarker(new MarkerOptions()
  202. .icon(BitmapDescriptorFactory.fromResource(R.drawable.car))
  203. .position(new LatLng(latitude,longitude)).title("You"));
  204.  
  205.  
  206.  
  207. mMap.animateCamera(CameraUpdateFactory.newLatLngZoom (new LatLng(latitude, longitude),15.0f));
  208.  
  209. rotateMarker(mCurrentUser,-360,mMap);
  210.  
  211. }
  212. });
  213. }else
  214. {
  215. Log.d("ERROR","Cannot get your Location");
  216. }
  217. }
  218. }
  219.  
  220.  
  221.  
  222.  
  223.  
  224. private void rotateMarker(final Marker mCurrentUser, final float i, GoogleMap mMap) {
  225. final Handler handler = new Handler();
  226. final long start = SystemClock.uptimeMillis();
  227. final float startRotation =mCurrentUser.getRotation();
  228. final long duration =1500;
  229.  
  230. final Interpolator interpolator = new LinearInterpolator();
  231.  
  232. handler.post(new Runnable() {
  233. @Override
  234. public void run() {
  235. long elapsed =SystemClock.uptimeMillis() - start;
  236. float t = interpolator.getInterpolation((float)elapsed/duration);
  237. float rot = t*i+(1-t)*startRotation;
  238. mCurrentUser.setRotation(-rot >180?rot/2:rot);
  239. if(t<1.0){
  240. handler.postDelayed(this,16);
  241. }
  242. }
  243. });
  244.  
  245. }
  246.  
  247. private void startLocationUpdate() {
  248.  
  249. if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED &&
  250. ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED )
  251. {
  252. return;
  253. }
  254.  
  255. LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleAPiClient, mlocationRequest , (com.google.android.gms.location.LocationListener) this);
  256.  
  257. }
  258.  
  259.  
  260. @Override
  261. public void onMapReady(GoogleMap googleMap) {
  262. mMap = googleMap;
  263.  
  264.  
  265. }
  266.  
  267. @Override
  268. public void onLocationChanged(Location location) {
  269. mLastLocation = location;
  270. displayLocaion();
  271.  
  272. }
  273.  
  274. @Override
  275. public void onStatusChanged(String provider, int status, Bundle extras) {
  276.  
  277. }
  278.  
  279. @Override
  280. public void onProviderEnabled(String provider) {
  281.  
  282. }
  283.  
  284. @Override
  285. public void onProviderDisabled(String provider) {
  286.  
  287. }
  288.  
  289. @Override
  290. public void onConnected(@Nullable Bundle bundle) {
  291. displayLocaion();
  292. startLocationUpdate();
  293.  
  294. }
  295.  
  296. @Override
  297. public void onConnectionSuspended(int i) {
  298. mGoogleAPiClient.connect();
  299.  
  300. }
  301.  
  302.  
  303. @Override
  304. public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
  305.  
  306. }
  307. }
Add Comment
Please, Sign In to add comment