Sunteți pe pagina 1din 4

package com.example.maaz.

gpswriter;
import android.Manifest;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.google.android.gms.appindexing.AppIndex;
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.LocationSettingsStatusCodes;
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.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends AppCompatActivity implements OnMapReadyCallbac
k, LocationListener {
protected static final int REQUEST_CHECK_SETTINGS = 0x1;
private static double latitude;
private static double longitude;
private static double altitude;
// flags for GPS, Network status
boolean isGPSEnabled = false;
boolean isNetworkEnabled = false;
private GoogleMap mMap;
private LocationManager locationManager;
ProgressDialog progress;
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
private GoogleApiClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragment
Manager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
progress = ProgressDialog.show(this, "dialog title", "Loading", true);
locationManager = (LocationManager) this.getSystemService(Context.LOCATI
ON_SERVICE);
// getting GPS status
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PRO
VIDER);
// getting network status
ConnectivityManager conMan = (ConnectivityManager) this.getSystemService
(Context.CONNECTIVITY_SERVICE);
NetworkInfo.State mobile = conMan.getNetworkInfo(0).getState();
NetworkInfo.State wifi = conMan.getNetworkInfo(1).getState();
if (mobile == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.C
ONNECTED) {
isNetworkEnabled = true;
}
Log.d("GPS, Network = ", isGPSEnabled + ", " + isNetworkEnabled);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_
FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfP
ermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PE
RMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[
] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the
documentation
// for ActivityCompat#requestPermissions for more details.
return;
} else {
if (isNetworkEnabled == true) {
Log.d("1", "onCreate: Network");
locationManager.requestLocationUpdates(LocationManager.NETWORK_P
ROVIDER, 5000, 5, this); //sec, meters
// locationManager.requestSingleUpdate(LocationManager.NETWORK_PR
OVIDER, this, Looper.myLooper()); //single Update
} else {
Log.d("2", "onCreate: GPS");
locationManager.requestLocationUpdates(LocationManager.GPS_PROVI
DER, 5000, 5, this); //sec, meters
// locationManager.requestSingleUpdate(LocationManager.GPS_PROVID
ER, this, Looper.myLooper()); //single Update
}
}
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
@Override
public void onLocationChanged(Location location) {
progress.dismiss();
latitude = location.getLatitude();
longitude = location.getLongitude();
altitude = location.getAltitude();
Log.d("Maaz", latitude + " " + longitude + " " + altitude);
if (latitude != 0.0 && longitude != 0.0) {
Toast.makeText(MainActivity.this, "Location Found!", Toast.LENGTH_LO
NG).show();
mMap.clear();
LatLng latlng = new LatLng(latitude, longitude);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(latlng)
.zoom(15)
.bearing(0)
.tilt(45)
.build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosit
ion));
mMap.addMarker(new MarkerOptions().position(latlng)).showInfoWindow(
);
mMap.getUiSettings().setCompassEnabled(true);
mMap.getUiSettings().setMapToolbarEnabled(true);
}
}
@Override
public void onProviderDisabled(String provider) {
displayLocationSettingsRequest(MainActivity.this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
private void displayLocationSettingsRequest(Context context) {
GoogleApiClient googleApiClient = new GoogleApiClient.Builder(context)
.addApi(LocationServices.API).build();
googleApiClient.connect();
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(10000);
locationRequest.setFastestInterval(10000 / 2);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Bu
ilder().addLocationRequest(locationRequest);
builder.setAlwaysShow(true);
PendingResult<LocationSettingsResult> result = LocationServices.Settings
Api.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:
Log.i("Location", "All location settings are satisfied."
);
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
Log.i("Location", "Location settings are not satisfied.
Show the user a dialog to upgrade location settings ");
try {
// Show the dialog by calling startResolutionForResu
lt(), and check the result
// in onActivityResult().
status.startResolutionForResult(MainActivity.this, R
EQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException e) {
Log.i("Location", "PendingIntent unable to execute r
equest.");
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE
:
Log.i("Location", "Location settings are inadequate, and
cannot be fixed here. Dialog not created.");
break;
}
}
});
}
}

S-ar putea să vă placă și