Dependencies
implementation 'pub.devrel:easypermissions:0.2.0'//permission
implementation 'com.google.android.gms:play-services-maps:16.0.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
apply plugin: 'com.google.gms.google-services'
Androidmanifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.location.gps" />
SplashActivity.java
package com.example.e_building_design;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.util.List;
import pub.devrel.easypermissions.EasyPermissions;
public class SplashActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{
private ImageView iv_logo;
private String[] permissions = {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
};
private Activity activity=SplashActivity.this;
public String token;
// private LoginPreferences loginPreferences;
// private ConnectionDetector connectionDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
initView();
}
private void initView() {
iv_logo = (ImageView) findViewById(R.id.iv_logo);
Animation aniFade = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fade_in);
iv_logo.startAnimation(aniFade);
if (!EasyPermissions.hasPermissions(activity, permissions)) {
EasyPermissions.requestPermissions(activity, "Please allow app", 1, permissions);
} else {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (new LoginPreferences(activity).isUserLoggedIn()) {
if(connectionDetector.isConnectingToInternet()) {
new Login().execute();
}
} else {*/
startActivity(new Intent(activity, LoginActivity.class));
finish();
//}
}
}, 3500);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (!EasyPermissions.hasPermissions(activity, permissions)) {
EasyPermissions.requestPermissions(activity, "Please allow app", 1, permissions);
} else {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
/* startActivity(new Intent(activity, LoginActivity.class));
finish();*/
/* if (new LoginPreferences(activity).isUserLoggedIn()) {
if(connectionDetector.isConnectingToInternet()) {
new Login().execute();
}
} else {*/
startActivity(new Intent(activity, LoginActivity.class));
finish();
//}
}
}, 3000);
}
}
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
finish();
}
}
MapsActivity.java
package com.example.e_building_design;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;
import android.Manifest;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.LinearInterpolator;
import android.widget.EditText;
import android.widget.LinearLayout;
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.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.LocationSettingsRequest;
import com.google.android.gms.location.LocationSettingsResult;
import com.google.android.gms.location.LocationSettingsStates;
import com.google.android.gms.location.LocationSettingsStatusCodes;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.LocationSource;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,
GoogleMap.OnMyLocationButtonClickListener,
GoogleMap.OnMyLocationClickListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener, GoogleMap.OnMapClickListener {
private GoogleMap mMap;
private GoogleMap.OnMapClickListener mCustomOnMapClickListener;
CameraUpdate cameraUpdate;
Marker marker;
double lat, lng;
LocationRequest mLocationRequest;
GoogleApiClient mGoogleApiClient;
Location mLastLocation;
private GoogleApiClient googleApiClient;
final static int REQUEST_LOCATION = 199;
// check GPS enable or not
private LocationManager locationManager;
private int flag = 0;
private EditText txt_address;
private static final long MIN_TIME = 10000; //10000 millisecond = 10 second
private static final float MIN_DISTANCE = 100; //1000 meter = 1km
@SuppressLint("MissingPermission")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
txt_address = (EditText) findViewById(R.id.txt_address);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
// Acquire a reference to the system Location Manager
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (!hasGPSDevice(MapsActivity.this)) {
Toast.makeText(MapsActivity.this, "Gps not Supported", Toast.LENGTH_SHORT).show();
}
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(MapsActivity.this)) {
Log.e("keshav", "Gps not enabled");
flag=0;
enableLoc();
} else {
Log.e("keshav", "Gps already enabled");
}
mapFragment.getMapAsync(this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, this);
//Get a fast fix with the last known location
mLastLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
protected synchronized void buildGoogleApiClient() {
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mGoogleApiClient.connect();
}
}
@SuppressLint("MissingPermission")
@Override
public void onMapReady(final GoogleMap googleMap) {
this.mMap = googleMap;
buildGoogleApiClient();
mMap.setMyLocationEnabled(true);
mMap.setOnMapClickListener(this);
mMap.setOnMyLocationClickListener(this);
}
public String getAddress(Context ctx, double lat, double lng) {
String fullAdd = null;
try {
Geocoder geocoder = new Geocoder(ctx, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
if (addresses.size() > 0) {
Address address = addresses.get(0);
fullAdd = address.getAddressLine(0);
}
} catch (IOException ex) {
ex.printStackTrace();
}
return fullAdd;
}
private boolean hasGPSDevice(Context context) {
final LocationManager mgr = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
if (mgr == null)
return false;
final List<String> providers = mgr.getAllProviders();
if (providers == null)
return false;
return providers.contains(LocationManager.GPS_PROVIDER);
}
private void enableLoc() {
if (googleApiClient == null)
{
googleApiClient = new GoogleApiClient.Builder(MapsActivity.this)
.addApi(LocationServices.API)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
googleApiClient.connect();
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d("Location error", "Location error " + connectionResult.getErrorCode());
}
}).build();
googleApiClient.connect();
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(30 * 1000);
locationRequest.setFastestInterval(5 * 1000);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest);
builder.setAlwaysShow(true);
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(LocationSettingsResult result) {
final Status status = result.getStatus();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
// All location settings are satisfied. The client can initialize location
// requests here.
Log.e("onResult", "SUCCESS");
// flag = 0;
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
try
{
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
status.startResolutionForResult(MapsActivity.this, REQUEST_LOCATION);
// finish();
}
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.
Log.e("onResult", "UNAVAILABLE");
break;
}
}
});
}
}
@Override
public void onLocationChanged(Location location)
{
Log.e("Flag==", String.valueOf(flag));
try {
if (flag == 0)
{
flag = 1;
lat = location.getLatitude();
lng = location.getLongitude();
LatLng sydney = new LatLng(lat, lng);
// mMap.clear();
String Address = getAddress(MapsActivity.this, lat, lng);
cameraUpdate = CameraUpdateFactory.newLatLng(sydney);
marker = mMap.addMarker(new MarkerOptions().position(sydney));
marker.showInfoWindow();
mMap.moveCamera(cameraUpdate);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15));
txt_address.setText(Address);
Log.e("Address==", Address);
Log.e("latituted==", String.valueOf(lat));
Log.e("longtituted==", String.valueOf(lng));
}
}catch (Exception e)
{
e.printStackTrace();
Log.e("Error==",e.toString());
}
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
@Override
public void onConnected(@Nullable Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
public boolean onMyLocationButtonClick() {
return false;
}
@Override
public void onMyLocationClick(@NonNull Location location) {
}
@Override
public void onMapClick(LatLng latLng) {
if(mMap!=null)
mMap.clear();
marker = mMap.addMarker(new MarkerOptions().position(latLng));
// marker.showInfoWindow();
cameraUpdate = CameraUpdateFactory.newLatLng(latLng);
mMap.animateCamera(cameraUpdate);
String location = String.valueOf(latLng).replace("lat/lng: (", "");
String address[] = location.replace(")", "").split(",");
lat = Double.parseDouble(address[0]);
lng = Double.parseDouble(address[1]);
String Address = getAddress(MapsActivity.this, lat, lng);
txt_address.setText(Address);
Log.e("Address1==", Address);
Log.e("latituted1==", String.valueOf(address[0]));
Log.e("longtituted1==", String.valueOf(address[1]));
}
}
activity_maps.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:focusableInTouchMode="true"
android:orientation="vertical"
tools:context=".MapsActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>