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"