import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.widget.TextView;
/**
* Created by ricksam on 19/11/2016.
* <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
* <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
*/
public class GPSHelper {
private IGPSView view;
private LocationManager locationManager;
public GPSHelper(IGPSView view){
this.view = view;
locationManager = (LocationManager) getActivityInstance().getSystemService(Context.LOCATION_SERVICE);
start();
}
public Activity getActivityInstance(){
return (Activity)view;
}
private final LocationListener networkLocationListener = new LocationListener() {
public void onStatusChanged(String provider, int status, Bundle extras) {
switch (status) {
case LocationProvider.AVAILABLE:
//textView.setText("Network location available again\n");
break;
case LocationProvider.OUT_OF_SERVICE:
//textView.setText("Network location out of service\n");
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
//textView.setText("Network location temporarily unavailable\n");
break;
}
}
public void onProviderEnabled(String provider) {
//textView.setText("Network Provider Enabled\n");
}
public void onProviderDisabled(String provider) {
//textView.setText("Network Provider Disabled\n");
}
public void onLocationChanged(Location location) {
view.setLocation(location.getLatitude(), location.getLongitude());
stop();
}
};
private final LocationListener gpsLocationListener = new LocationListener() {
public void onStatusChanged(String provider, int status, Bundle extras) {
switch (status) {
case LocationProvider.AVAILABLE:
//textView.setText("GPS available again\n");
break;
case LocationProvider.OUT_OF_SERVICE:
//textView.setText("GPS out of service\n");
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
//textView.setText("GPS temporarily unavailable\n");
break;
}
}
public void onProviderEnabled(String provider) {
//textView.setText("GPS Provider Enabled\n");
}
public void onProviderDisabled(String provider) {
//textView.setText("GPS Provider Disabled\n");
//Toast.makeText(MainActivity.this, "GPS desabilitado", Toast.LENGTH_LONG);
//MessageBox.alert(MainActivity.this, "Atenção", "Para gravar avaliações é importante que o GPS do aparelho esteja ligado!");
}
public void onLocationChanged(Location location) {
if (ActivityCompat.checkSelfPermission(getActivityInstance(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivityInstance(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_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;
}
locationManager.removeUpdates(networkLocationListener);
view.setLocation(location.getLatitude(), location.getLongitude());
stop();
}
};
// Use no onResume
public void start() {
if (ActivityCompat.checkSelfPermission(getActivityInstance(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivityInstance(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_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;
}
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0, networkLocationListener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 0, gpsLocationListener);
}
// Use no onPause
public void stop() {
if (ActivityCompat.checkSelfPermission(getActivityInstance(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivityInstance(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_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;
}
locationManager.removeUpdates(networkLocationListener);
locationManager.removeUpdates(gpsLocationListener);
}
public interface IGPSView{
void setLocation(double Latitude, double Longitude);
}
}