Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MainActivity.java
- package com.sourcey.materiallogindemo;
- import android.Manifest;
- import android.annotation.SuppressLint;
- import android.app.AlertDialog;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.location.Location;
- import android.location.LocationListener;
- import android.location.LocationManager;
- import android.os.Build;
- import android.os.Bundle;
- import android.provider.Settings;
- import android.support.annotation.NonNull;
- import android.support.annotation.Nullable;
- import android.support.design.widget.FloatingActionButton;
- import android.support.design.widget.Snackbar;
- import android.support.v7.app.AppCompatActivity;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- 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.location.LocationServices;
- import com.google.android.gms.maps.CameraUpdateFactory;
- import com.google.android.gms.maps.GoogleMap;
- 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.gson.Gson;
- import com.karumi.dexter.Dexter;
- import com.karumi.dexter.PermissionToken;
- import com.karumi.dexter.listener.PermissionDeniedResponse;
- import com.karumi.dexter.listener.PermissionGrantedResponse;
- import com.karumi.dexter.listener.PermissionRequest;
- import com.karumi.dexter.listener.single.PermissionListener;
- import butterknife.BindView;
- import butterknife.ButterKnife;
- import butterknife.OnClick;
- public class MainActivity extends AppCompatActivity implements OnMapReadyCallback,
- GoogleApiClient.ConnectionCallbacks,
- GoogleApiClient.OnConnectionFailedListener,
- GoogleMap.OnInfoWindowClickListener,
- LocationListener {
- private final int LOCATION_REQUEST_CODE = 101;
- private final String TAG = MainActivity.class.getSimpleName();
- private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
- private static final long MIN_TIME_BW_UPDATES = 1000 * 60; // 1 minute
- @BindView(R.id.fab)
- FloatingActionButton FAB;
- @BindView(R.id.preview)
- FloatingActionButton PREVIEW;
- private GoogleMap mMap;
- private GoogleApiClient googleApiClient;
- private DataHelper dbHelper;
- protected Cursor cursor;
- private LatLng position;
- private String[] daftar;
- private Location location; // location
- protected LocationManager locationManager;
- private boolean isGPSEnabled = false;
- private boolean isNetworkEnabled = false;
- private boolean canGetLocation = false;
- private double latitude; // latitude
- private double longitude; // longitude
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Intent intent = new Intent(this, LoginActivity.class);
- startActivity(intent);
- ButterKnife.bind(this);
- findLocation();
- dbHelper = new DataHelper(this);
- googleApiClient = new GoogleApiClient.Builder(this)
- .addApi(LocationServices.API)
- .addConnectionCallbacks(this)
- .addOnConnectionFailedListener(this)
- .build();
- }
- public void findLocation() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- Dexter.withActivity(this)
- .withPermission(Manifest.permission.ACCESS_FINE_LOCATION)
- .withListener(new PermissionListener() {
- @Override
- public void onPermissionGranted(PermissionGrantedResponse response) {
- getLocation();
- if (isLocationEnable()) {
- double latitude = getLatitude();
- double longitude = getLongitude();
- Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
- } else {
- showSettingsAlert();
- }
- }
- @Override
- public void onPermissionDenied(PermissionDeniedResponse response) {
- Toast.makeText(getApplicationContext(), R.string.permission_location_description, Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
- Toast.makeText(getApplicationContext(), R.string.permission_location_description, Toast.LENGTH_SHORT).show();
- }
- })
- .check();
- } else {
- getLocation();
- if (isLocationEnable()) {
- double latitude = getLatitude();
- double longitude = getLongitude();
- Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
- } else {
- showSettingsAlert();
- }
- }
- }
- public double getLatitude(){
- if(location != null){
- latitude = location.getLatitude();
- }
- // return latitude
- return latitude;
- }
- public double getLongitude(){
- if(location != null){
- longitude = location.getLongitude();
- }
- // return longitude
- return longitude;
- }
- @SuppressLint("MissingPermission")
- private void getLocation () {
- try {
- locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
- // getting GPS status
- isGPSEnabled = locationManager
- .isProviderEnabled(LocationManager.GPS_PROVIDER);
- // getting network status
- isNetworkEnabled = locationManager
- .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
- if (!isGPSEnabled && !isNetworkEnabled) {
- // no network provider is enabled
- canGetLocation = false;
- } else {
- canGetLocation = true;
- // First get location from Network Provider
- if (isNetworkEnabled) {
- locationManager.requestLocationUpdates(
- LocationManager.NETWORK_PROVIDER,
- MIN_TIME_BW_UPDATES,
- MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
- Log.d("Network", "Network");
- if (locationManager != null) {
- location = locationManager
- .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
- if (location != null) {
- latitude = location.getLatitude();
- longitude = location.getLongitude();
- }
- }
- }
- // if GPS Enabled get lat/long using GPS Services
- if (isGPSEnabled) {
- if (location == null) {
- locationManager.requestLocationUpdates(
- LocationManager.GPS_PROVIDER,
- MIN_TIME_BW_UPDATES,
- MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
- Log.d("GPS Enabled", "GPS Enabled");
- if (locationManager != null) {
- location = locationManager
- .getLastKnownLocation(LocationManager.GPS_PROVIDER);
- if (location != null) {
- latitude = location.getLatitude();
- longitude = location.getLongitude();
- }
- }
- }
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public boolean isLocationEnable() {
- return this.canGetLocation;
- }
- public void setLocationEnable(boolean enable) {
- if (enable) {
- canGetLocation = true;
- } else {
- canGetLocation = false;
- }
- }
- public void showSettingsAlert(){
- AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
- alertDialog.setTitle("GPS is settings");
- alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
- alertDialog.setPositiveButton("Settings", (dialog, which) -> {
- Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
- startActivity(intent);
- });
- alertDialog.setNegativeButton("Cancel", (dialog, which) -> dialog.cancel());
- alertDialog.show();
- }
- public void onStart() {
- super.onStart();
- googleApiClient.connect();
- }
- public void onStop() {
- super.onStop();
- googleApiClient.disconnect();
- }
- @OnClick(R.id.fab)
- public void mButton() {
- final View view = View.inflate(MainActivity.this, R.layout.dialog_input, null);
- final EditText nama = ButterKnife.findById(view, R.id.nama);
- final EditText luas = ButterKnife.findById(view, R.id.luas);
- final EditText keterangan = ButterKnife.findById(view, R.id.keterangan);
- final AlertDialog builder = new AlertDialog.Builder(MainActivity.this, R.style.AppTheme_Dark)
- .setView(view)
- .setPositiveButton(android.R.string.ok, null)
- .setNegativeButton("Batal", null)
- .create();
- ButterKnife.bind(builder, view);
- builder.setOnShowListener(dialog -> {
- Button b = builder.getButton(AlertDialog.BUTTON_POSITIVE);
- b.setOnClickListener(v -> {
- SQLiteDatabase db = dbHelper.getWritableDatabase();
- db.execSQL("insert into markers(nama, luas, longitude, latitude, keterangan) values('" +
- nama.getText().toString() + "','" +
- luas.getText().toString() + "','" +
- String.valueOf(position.longitude) + "','" +
- String.valueOf(position.latitude) + "','" +
- keterangan.getText().toString() + "')");
- Snackbar.make(view, "Tersimpan", Snackbar.LENGTH_LONG).show();
- builder.dismiss();
- });
- });
- builder.show();
- }
- public class MarkerInfo {
- private String title;
- private String luas;
- private String keterangan;
- public MarkerInfo() {
- }
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public String getLuas() {
- return luas;
- }
- public void setLuas(String luas) {
- this.luas = luas;
- }
- public String getKeterangan() {
- return keterangan;
- }
- public void setKeterangan(String keterangan) {
- this.keterangan = keterangan;
- }
- }
- @OnClick(R.id.preview)
- public void previewClick() {
- SQLiteDatabase db = dbHelper.getReadableDatabase();
- String tableString = String.format("Table %s:\n", "markers");
- Cursor allRows = db.rawQuery("SELECT * FROM markers", null);
- if (allRows.moveToFirst()) {
- String[] columnNames = allRows.getColumnNames();
- do {
- for (final String name : columnNames) {
- double latitude = Double.parseDouble(allRows.getString(allRows.getColumnIndex("latitude")));
- double longitude = Double.parseDouble(allRows.getString(allRows.getColumnIndex("longitude")));
- LatLng latLng = new LatLng(latitude, longitude);
- MarkerInfo markerInfo = new MarkerInfo();
- markerInfo.setTitle(allRows.getString(allRows.getColumnIndex("nama")));
- markerInfo.setKeterangan(allRows.getString(allRows.getColumnIndex("keterangan")));
- markerInfo.setLuas(allRows.getString(allRows.getColumnIndex("luas")));
- Gson gson = new Gson();
- String markerInfoString = gson.toJson(markerInfo);
- mMap.addMarker(new MarkerOptions().position(latLng).snippet(markerInfoString));
- tableString += String.format("%s: %s\n", name, allRows.getString(allRows.getColumnIndex(name)));
- }
- tableString += "\n";
- } while (allRows.moveToNext());
- }
- Log.d("TAG", tableString);
- }
- /**
- * Manipulates the map once available.
- * This callback is triggered when the map is ready to be used.
- * This is where we can add markers or lines, add listeners or move the camera. In this case,
- * we just add a marker near Sydney, Australia.
- * If Google Play services is not installed on the device, the user will be prompted to install
- * it inside the SupportMapFragment. This method will only be triggered once the user has
- * installed Google Play services and returned to the app.
- */
- @SuppressLint("MissingPermission")
- @Override
- public void onMapReady(GoogleMap googleMap) {
- mMap = googleMap;
- if (isLocationEnable()) {
- mMap.setMyLocationEnabled(true);
- checkLocationandAddToMap();
- if (mMap != null) {
- mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
- @Override
- public View getInfoWindow(Marker marker) {
- return null;
- }
- @Override
- public View getInfoContents(Marker marker) {
- Gson gson = new Gson();
- MarkerInfo aMarkerInfo = gson.fromJson(marker.getSnippet(), MarkerInfo.class);
- View v = getLayoutInflater().inflate(R.layout.info_window, null);
- TextView tvName = v.findViewById(R.id.namaTempat);
- TextView tvLuas = v.findViewById(R.id.luas);
- TextView tvKete = v.findViewById(R.id.keterangan);
- tvName.setText(aMarkerInfo.getTitle());
- tvLuas.setText("Luas :" + aMarkerInfo.getLuas());
- tvKete.setText(aMarkerInfo.getKeterangan());
- return v;
- }
- });
- }
- }
- }
- @Override
- public void onConnected(@Nullable Bundle bundle) {
- SupportMapFragment mapFragment = (SupportMapFragment)
- getSupportFragmentManager().findFragmentById(R.id.map);
- mapFragment.getMapAsync(this);
- }
- @Override
- public void onConnectionSuspended(int i) {
- }
- @Override
- public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
- }
- @SuppressLint("MissingPermission")
- private void checkLocationandAddToMap() {
- if (isLocationEnable()) {
- location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
- position = new LatLng(location.getLatitude(), location.getLongitude());
- //MarkerOptions are used to create a new Marker.You can specify location, title etc with MarkerOptions
- MarkerInfo markerInfo = new MarkerInfo();
- markerInfo.setTitle("Current Position");
- markerInfo.setKeterangan("Keberadaan Anda Sekarang");
- markerInfo.setLuas("200");
- Gson gson = new Gson();
- String markerInfoString = gson.toJson(markerInfo);
- final MarkerOptions markerOptions = new MarkerOptions().position(position).draggable(true).snippet(markerInfoString);
- //Adding the created the marker on the map
- mMap.addMarker(markerOptions);
- mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(position, 12.0f));
- mMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
- @Override
- public void onMarkerDragStart(Marker marker) {
- Toast.makeText(MainActivity.this, "Memilih Tempat..",
- Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onMarkerDrag(Marker marker) {
- System.out.println("Draagging");
- }
- @Override
- public void onMarkerDragEnd(Marker marker) {
- position = marker.getPosition();
- }
- });
- }
- }
- @Override
- public void onInfoWindowClick(Marker marker) {
- }
- @Override
- public void onLocationChanged(Location location) {
- this.location = location;
- checkLocationandAddToMap();
- }
- @Override
- public void onStatusChanged(String provider, int status, Bundle extras) {
- }
- @Override
- public void onProviderEnabled(String provider) {
- setLocationEnable(true);
- }
- @Override
- public void onProviderDisabled(String provider) {
- setLocationEnable(false);
- }
- }
- string.xml
- <resources>
- <string name="app_name">Material Login Example</string>
- <string name="hello_world">Hello world!</string>
- <string name="action_settings">Settings</string>
- <string name="title_activity_maps">Map</string>
- <string name="submit">Submit</string>
- <string name="cancel">Cancel</string>
- <string name="permission_location_description">We need permission to Access your Location</string>
- <string name="permission_location_title">Permission required</string>
- <string name="permission_location_yes">Yes</string>
- <string name="permission_location_no">No</string>
- </resources>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement