Skip to content Skip to sidebar Skip to footer

Android: Display User Location On Map Fragment

i am developing an app for my final year exam in android studio and i don't know how to show user location on MapFragment. I've already do this but inside an activity, i need it in

Solution 1:

just add this

@OverridepublicvoidonMapReady(GoogleMap googleMap) {

    MapsInitializer.initialize(getActivity());
    mMap = googleMap;
    mMap.setMyLocationEnabled(true);
    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
}

to get current location on map.

Solution 2:

Please try this:

In Gradle:

implementation 'gun0912.ted:tedpermission:2.1.0'
implementation 'com.google.android.gms:play-services:12.0.1'

In Fragment:

publicclassHomeextendsFragmentimplementsGoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        LocationListener, OnMapReadyCallback {

    private GoogleMap mMap;

    private GoogleApiClient mGoogleApiClient;
    private LocationRequest mLocationRequest;

    private Location locationData;

    privatestaticfinallongTIME_INTERVAL_GET_LOCATION=1000 * 5; // 1 MinuteprivatefinalstaticintCONNECTION_FAILURE_RESOLUTION_REQUEST=5000;

    @Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ViewrootView= inflater.inflate(R.layout.fragment_home, null);

        SupportMapFragmentmapFragment= (SupportMapFragment) getChildFragmentManager()
                .findFragmentById(R.id.map);

        mapFragment.getMapAsync(this);

        TedPermission.with(getActivity())
                .setPermissionListener(permissionlistener)
                .setDeniedMessage("If you reject permission,you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
                .setPermissions(Manifest.permission.ACCESS_FINE_LOCATION)
                .check();

        mGoogleApiClient = newGoogleApiClient.Builder(getActivity())
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();

        return rootView;
    }


    @OverridepublicvoidonResume() {
        super.onResume();


    }

    PermissionListenerpermissionlistener=newPermissionListener() {
        @OverridepublicvoidonPermissionGranted() {

            // Create the LocationRequest object
            mLocationRequest = LocationRequest.create()
                    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                    .setInterval(TIME_INTERVAL_GET_LOCATION)    // 3 seconds, in milliseconds
                    .setFastestInterval(TIME_INTERVAL_GET_LOCATION); // 1 second, in millisecondsif (!mGoogleApiClient.isConnected()) {
                mGoogleApiClient.connect();
                locationChecker(mGoogleApiClient, getActivity());
            }
        }

        @OverridepublicvoidonPermissionDenied(ArrayList<String> deniedPermissions) {
        }
    };

    @OverridepublicvoidonConnected(@Nullable Bundle bundle) {

        if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            return;
        }


        FusedLocationProviderClientmFusedLocationClient= LocationServices.getFusedLocationProviderClient(getActivity());
        mFusedLocationClient.requestLocationUpdates(mLocationRequest, newLocationCallback() {
            @OverridepublicvoidonLocationResult(LocationResult locationResult) {
                locationData = locationResult.getLastLocation();
                Toast.makeText(getActivity(), "Latitude: " + locationData.getLatitude() + ", Longitude: " + locationData.getLongitude(), Toast.LENGTH_SHORT).show();
                Log.w("==>UpdateLocation<==", "" + String.format("%.6f", locationData.getLatitude()) + "," + String.format("%.6f", locationData.getLongitude()));

                if (locationData != null) {

                    LatLngpoint=newLatLng(locationData.getLatitude(), locationData.getLongitude());

                    mMap.clear();

                    Markermarker= mMap.addMarker(newMarkerOptions().position(point).title("Your Current Location"));
                    //marker.showInfoWindow();CameraPositioncameraPosition=newCameraPosition.Builder().target(point).zoom(16).build();
                    mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

                }

            }
        }, null);

    }

    @OverridepublicvoidonConnectionSuspended(int i) {

    }

    @OverridepublicvoidonConnectionFailed(@NonNull ConnectionResult connectionResult) {

        if (connectionResult.hasResolution() && getActivity() instanceof Activity) {
            try {
                Activityactivity= (Activity) getActivity();
                connectionResult.startResolutionForResult(activity, CONNECTION_FAILURE_RESOLUTION_REQUEST);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            Log.i("", "Location services connection failed with code " + connectionResult.getErrorCode());
        }

    }

    publicvoidlocationChecker(GoogleApiClient mGoogleApiClient, final Activity activity) {
        LocationRequestlocationRequest= LocationRequest.create();
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        locationRequest.setInterval(30 * 1000);
        locationRequest.setFastestInterval(5 * 1000);
        LocationSettingsRequest.Builderbuilder=newLocationSettingsRequest.Builder()
                .addLocationRequest(locationRequest);
        builder.setAlwaysShow(true);
        PendingResult<LocationSettingsResult> result =
                LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
        result.setResultCallback(newResultCallback<LocationSettingsResult>() {
            @OverridepublicvoidonResult(LocationSettingsResult result) {
                finalStatusstatus= result.getStatus();
                finalLocationSettingsStatesstate= result.getLocationSettingsStates();
                switch (status.getStatusCode()) {
                    case LocationSettingsStatusCodes.SUCCESS:
                        // All location settings are satisfied. The client can initialize location// requests here.break;
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                        // Location settings are not satisfied. But could be fixed by showing the user// a dialog.try {
                            // Show the dialog by calling startResolutionForResult(),// and check the result in onActivityResult().
                            status.startResolutionForResult(activity, 1000);

                        } catch (IntentSender.SendIntentException e) {
                            // Ignore the error.
                        }
                        break;
                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                        // Location settings are not satisfied. However, we have no way to fix the// settings so we won't show the dialog.break;
                }
            }


        });
    }

    @OverridepublicvoidonLocationChanged(Location location) {
        //Log.w("==>UpdateLocation<==", "" + String.format("%.6f", location.getLatitude()) + "," + String.format("%.6f", location.getLongitude()));//locationData = location;//Toast.makeText(getActivity(), "Latitude: " + locationData.getLatitude() + ", Longitude: " + locationData.getLongitude(), Toast.LENGTH_SHORT).show();
    }

    @OverridepublicvoidonMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        mMap.getUiSettings().setZoomControlsEnabled(false);
        mMap.setBuildingsEnabled(false);
        mMap.getUiSettings().setCompassEnabled(true);
        //mMap.getUiSettings().setAllGesturesEnabled(false);
        mMap.getUiSettings().setCompassEnabled(true);
        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        mMap.setIndoorEnabled(false);
        mMap.getUiSettings().setRotateGesturesEnabled(true);



    }
}

In Xml

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#E9EFF7"android:orientation="vertical"><fragmentandroid:id="@+id/map"android:name="com.google.android.gms.maps.SupportMapFragment"class="com.google.android.gms.maps.SupportMapFragment"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

In AndroidManifest.xml

<uses-permissionandroid:name="android.permission.INTERNET" /><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" /><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION" /><permissionandroid:name="your_packagename.permission.MAPS_RECEIVE"android:protectionLevel="signature" /><uses-permissionandroid:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /><uses-permissionandroid:name="your_packagename.permission.MAPS_RECEIVE" /><uses-featureandroid:glEsVersion="0x00020000"android:required="true" /><application...

<meta-dataandroid:name="com.google.android.geo.API_KEY"android:value="@string/google_maps_your_key"/><meta-dataandroid:name="com.google.android.gms.version"android:value="@integer/google_play_services_version" /></application>

Post a Comment for "Android: Display User Location On Map Fragment"