如何检测用户是否禁用GPS(Android - Play服务) [英] How can I detect if user disable GPS (Android - Play Services)
问题描述
我使用gms.location.LocationListener(Google Play Services)来获取用户的位置。它工作正常,但我想要检测每当用户禁用或启用他/她的GPS。
如图所示。
当我打开/关闭位置时,不会调用任何方法。
当我切换应用程序并返回到我的应用程序时,将调用以下方法:
$ b
但是我需要在用户转动时调用该事件ON / OFF位置我列出的那些事件没有被调用。
注意:使用Android API,我可以使用onProviderEnabled和onProviderDisabled获得这些事件,我的问题是在使用GoogleApiClient后,这些事件不会再被调用。见图2和3.
之后,onProviderEnabled和onProviderDisabled不会被调用这是我想要解决的另一个问题。
- Android Studio 1.5.1
- 在Galaxy Note 3(SM-N900W8 Android 5.0,API 21)中进行测试
p>我的代码:package facilito.codigo.app.dflores.com.myapplicationcf;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentSender;
导入android.content.SharedPreferences;
导入android.location.Location;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.LocationListener; // android.location.LocationListener;
导入android.location.LocationManager;
导入android.os.AsyncTask;
导入android.support.design.widget.Snackbar;
导入android.support.v4.app.FragmentActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.View;
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.CameraUpdateFactory;
导入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;
导入com.google.android.gms.maps.model.Marker;
导入com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolygonOptions;
import org.json.JSONObject;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
导入Beans.Usuario;
import Beans.Utiles;
公共类地图扩展FragmentActivity实现OnMapReadyCallback,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener的{
私人GoogleMap的MMAP;
private double lat = 0.0;
private double lon = 0.0;
PolygonOptions comunidad = new PolygonOptions();
保护GoogleApiClient mGoogleApiClient;
LocationRequest mLocationRequest;
位置mLastLocation;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mapa);
如果(mGoogleApiClient == NULL){
mGoogleApiClient =新GoogleApiClient.Builder(本)
.addConnectionCallbacks(本)
.addOnConnectionFailedListener(本)
.addApi(LocationServices.API)
.build();
}
createLocationRequest();
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()。addLocationRequest(mLocationRequest);
PendingResult< LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient,builder.build());
result.setResultCallback(新ResultCallback< LocationSettingsResult>(){
@覆盖
公共无效onResult(LocationSettingsResult结果){
最终状态的状态= result.getStatus();
最终LocationSettingsStates状态= result.getLocationSettingsStates();
开关(status.getStatusCode()){
情况下LocationSettingsStatusCodes.SUCCESS:
//所有位置设定满足客户端可以在
//在此初始化位置请求
Log.d(BUHOO,case success :::::::::::>>>>>>> >>>>);
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
//位置设置不满意,但可以固定
// by向用户显示拨号盘OG。
try {
//通过调用startResolutionForResult(),
//显示对话框,并在onActivityResult()中检查结果。
Log.d(BUHOO,case RESOLUTION_REQUIRED :::::::::::>>>>>>>>>>>>) ;
status.startResolutionForResult(Mapa.this,1000);
} catch(IntentSender.SendIntentException e){
//忽略错误。
}
break;
情况下LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
Log.d( BUHOO,情况下SETTINGS_CHANGE_UNAVAILABLE :::::::::::>>>>>>>> ;>>>中);
//位置设置不满意。但是,我们没有办法
//来修复设置,所以我们不会显示对话框。
休息;
}
}
});
SharedPreferences pref = getSharedPreferences(BUHOO_APP,MODE_PRIVATE);
Usuario usuario = new Usuario(pref.getInt(ID_USUARIO,0),pref.getString(NOMBRE_USUARIO,null));
int idComu = pref.getInt(ID_COMUNIDAD,0);
String server = getResources()。getString(R.string.ip_server);
字符串SERVICIO = HTTP:// +服务器+ ?/ buhoo /内联网/ mi_comunidad / getComunidadByPersona_Service id_persona = + usuario.getIdUsuario()+ &安培; id_comunidad = + idComu;
Log.d(BUHOO,servicioservicioservicio ::::::+ servicio);
new llamarServicio()。execute(servicio);
//获取SupportMapFragment并在地图准备好使用时得到通知。
SupportMapFragment mapFragment =(SupportMapFragment)getSupportFragmentManager()。findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
protected void createLocationRequest(){
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
@Override
public void onConnected(Bundle bundle){
Log.d(BUHOO,:::: onConnected :::: );
尝试{
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
} catch(SecurityException e){
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
Log.d(BUHOO,ERROR onLocationChanged+ errors.toString());
}
// if(mRequestingLocationUpdates){
startLocationUpdates();
//
}
@Override
public void onConnectionSuspended(int i){
Log.d(BUHOO,::: :onConnectionSuspended ::::);
}
保护无效onStart(){
Log.d(BUHOO,:::: onStart ::::);
mGoogleApiClient.connect();
super.onStart();
}
保护无效onStop(){
Log.d(BUHOO,:::: onStop ::::);
mGoogleApiClient.disconnect();
super.onStop();
}
@Override
protected void onPause(){
Log.d(BUHOO,:::: onPause ::::);
super.onPause();
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient,this);
}
@Override
public void onResume(){
Log.d(BUHOO,:::: onResume ::::);
super.onResume();
if(mGoogleApiClient.isConnected()/ *&&!mRequestingLocationUpdates * /){
startLocationUpdates();
保护无效startLocationUpdates(){
尝试{
Log.d(BUHOO,:::: startLocationUpdates :: ::);
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest,this);
} catch(SecurityException e){
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
Log.d(BUHOO,ERROR onLocationChanged+ errors.toString());
}
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult){
Log.d(BUHOO,:::: onConnectionFailed ::::);
}
@Override
public void onLocationChanged(Location location){
Log.d(BUHOO,onLocationChanged ::::::+ location .getLatitude()+longitudinal:+ location.getLongitude());
lat = location.getLatitude();
lon = location.getLongitude();
onMapReady(mMap);
$ b $ * b $ b @Override
public void onStatusChanged(String provider,int status,Bundle extras){
}
@Override
public void onProviderEnabled(String provider){
Log.d(BUHOO,:::: onProviderEnabled ::::);
}
@Override
public void onProviderDisabled(String provider){
Log.d(BUHOO,:::: onProviderDisabled :::: );
} * /
私有类llamarServicio扩展了AsyncTask< String,Void,String> {
Utiles utiles = new Utiles();
protected String doInBackground(String ... url){
return utiles.readJSONFeed(url [0]);
}
保护无效onPostExecute(字符串结果){
尝试{
Log.d(BUHOO,result ::::::+ result );
JSONObject mainResponseObject = new JSONObject(result);
尝试{
String error = mainResponseObject.getString(error);
if(0.equals(error)){
JSONObject polyObj = new JSONObject(mainResponseObject.getString(poligono));
字符串puntos = polyObj.getString(puntos);
列表< String> puntosList = Arrays.asList(puntos.split(,));
for(Iterator it = puntosList.iterator(); it.hasNext();){
String str =(String)it.next();
String [] latlon = str.split();
double lati = Double.parseDouble(latlon [0] .replaceAll(\,));
double longi = Double.parseDouble(latlon [1] .replaceAll(\ ,));
comunidad.add(新LatLng(lati,longi));
//Log.d(\"BUHOO,lati ::::::+ lati +...+ longi);
}
Log.d(BUHOO,onPostExecute cantidad latlongs:+ comunidad.getPoints()。size());
onMapReady(mMap);
} else {
Log.d(CREATION,---- error inesperdo:);
}
} catch(Exception e){
e.printStackTrace();
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
Log.d(CREATION,tratando el JSON:+ errors.toString());
}
} catch(Exception e){
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
Log.d(CREATION,errorrrr onPostExecute:+ errors.toString());
}
}
}
/ **
*操作一次可用的地图。
*当地图准备好使用时,会触发此回调。
*这是我们可以添加标记或线条,添加听众或移动相机的位置。在这种情况下,
*我们只在澳大利亚悉尼附近添加一个标记。
*如果设备上未安装Google Play服务,系统会提示用户在SupportMapFragment中安装
* it。只有当用户安装了
* Google Play服务并返回到应用时,才会触发此方法。
* /
@Override
public void onMapReady(GoogleMap googleMap){
mMap = googleMap;
//在悉尼添加一个标记并移动相机
if(lat!= 0.0& lon!= 0.0){
LatLng myPos = new LatLng(lat,lon);
mMap.clear();
mMap.getUiSettings()。setZoomControlsEnabled(true);
mMap.getUiSettings()。setCompassEnabled(true);
mMap.getUiSettings()。setMyLocationButtonEnabled(true);
mMap.getUiSettings()。setZoomGesturesEnabled(true);
mMap.getUiSettings()。setMapToolbarEnabled(true);
mMap.addMarker(new MarkerOptions()。position(myPos).title(MI POSICION ACTUAL));
float zoomLevel = 17; //最高可达21
//多边形多边形= mMap.addPolygon(comunidad);
Log.d(BUHOO,PINTANDO MAPA cantidad latlongs:+ comunidad.getPoints()。size()); (comunidad.getPoints()。size()> 0){
mMap.addPolygon(comunidad / *。fillColor(Color.BLUE)* /);
if
}
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myPos,zoomLevel));
} else {
LatLng sydney = new LatLng(-34,151);
mMap.addMarker(new MarkerOptions()。position(sydney).title(Marker in Sydney));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
Log.d(BUHOO,PINTO SYDNEY);
$ b $ public static class GPSCheck extends BroadcastReceiver {
$ b $ @Override
public void onReceive(Context context,Intent intent){
LocationManager locationManager =(LocationManager)context.getSystemService(context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
Log.d(BUHOO,:D IS ON !!!!!!!!!!!!! !!!!!!);
} else {
Log.d(BUHOO,:( GPS已关闭!!!!!!!!!!!!!!!!!!!);
解决方案
/ div>您可以通过设置广播接收器来实现此目的,只要设备的GPS开启/关闭,就会触发
步骤:
1.首先创建一个扩展BroadcastReceiver的GPS类。
$ bpublic class GPSCheck extends BroadcastReceiver {
$ b $ @Override
public void onReceive(Context context,Intent intent){
LocationManager locationManager =(LocationManager)context.getSystemService(context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
}
else
{
Toast.makeText(上下文,请打开GPS,Toast.LENGTH_LONG).show();
}
}
}
2。然后在你的AndroidManifest.xml文件中提到这个类
< receiver android:name =com.yourpackagename .example.GPSCheck>
< intent-filter>
< category android:name =android.intent.category.DEFAULT/>
< / intent-filter>
< / receiver>
3。不要忘记添加此权限
< uses-permission android:name =android.permission。 ACCESS_GPS/>
I use gms.location.LocationListener (Google Play Services) to get the user's location. It works fine but I want to detect whenever the user disables or enables his/her GPS. As in this picture.
When I turn ON/OFF location no methods are called. When I switch apps and return to my app this methods are called:
- onStart
- onResume
- onConnected
But I need the event to be called whenever the user turns ON/OFF location those events I listed don't get called.
Note: With Android API I am able to get those events with onProviderEnabled and onProviderDisabled my problem there is that those events don't get called anymore after I use GoogleApiClient. See picture 2 and 3. After that onProviderEnabled and onProviderDisabled don't get called well that's another problem I'd like to solve both.
- Android Studio 1.5.1
- Testing in Galaxy Note 3 (SM-N900W8 Android 5.0, API 21)
My Code:
package facilito.codigo.app.dflores.com.myapplicationcf; import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.content.SharedPreferences; import android.location.Location; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.location.LocationListener;//android.location.LocationListener; import android.location.LocationManager; import android.os.AsyncTask; import android.support.design.widget.Snackbar; import android.support.v4.app.FragmentActivity; import android.os.Bundle; import android.util.Log; import android.view.View; 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.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.android.gms.maps.model.PolygonOptions; import org.json.JSONObject; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import Beans.Usuario; import Beans.Utiles; public class Mapa extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener{ private GoogleMap mMap; private double lat = 0.0; private double lon = 0.0; PolygonOptions comunidad = new PolygonOptions(); protected GoogleApiClient mGoogleApiClient; LocationRequest mLocationRequest; Location mLastLocation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mapa); if (mGoogleApiClient == null) { mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); } createLocationRequest(); LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest); PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build()); result.setResultCallback(new ResultCallback<LocationSettingsResult>() { @Override public void onResult(LocationSettingsResult result) { final Status status = result.getStatus(); final LocationSettingsStates state = result.getLocationSettingsStates(); switch (status.getStatusCode()) { case LocationSettingsStatusCodes.SUCCESS: // All location settings are satisfied. The client can // initialize location requests here. Log.d("BUHOO", "case success :::::::::::>>>>>>>>>>>"); break; case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: // Location settings are not satisfied, but this can be fixed // by showing the user a dialog. try { // Show the dialog by calling startResolutionForResult(), // and check the result in onActivityResult(). Log.d("BUHOO", "case RESOLUTION_REQUIRED :::::::::::>>>>>>>>>>>"); status.startResolutionForResult(Mapa.this, 1000); } catch (IntentSender.SendIntentException e) { // Ignore the error. } break; case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: Log.d("BUHOO", "case 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; } } }); SharedPreferences pref = getSharedPreferences("BUHOO_APP", MODE_PRIVATE); Usuario usuario = new Usuario(pref.getInt("ID_USUARIO", 0), pref.getString("NOMBRE_USUARIO", null)); int idComu = pref.getInt("ID_COMUNIDAD", 0); String server = getResources().getString(R.string.ip_server); String servicio = "http://"+server+"/buhoo/intranet/mi_comunidad/getComunidadByPersona_Service?id_persona="+usuario.getIdUsuario()+"&id_comunidad="+idComu; Log.d("BUHOO", "servicioservicioservicio:::::: "+servicio); new llamarServicio().execute(servicio); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); } protected void createLocationRequest() { mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(10000); mLocationRequest.setFastestInterval(5000); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); } @Override public void onConnected(Bundle bundle) { Log.d("BUHOO", ":::: onConnected ::::"); try { mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); } catch(SecurityException e) { StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); Log.d("BUHOO", " ERROR onLocationChanged "+errors.toString()); } //if (mRequestingLocationUpdates) { startLocationUpdates(); //} } @Override public void onConnectionSuspended(int i) { Log.d("BUHOO", ":::: onConnectionSuspended ::::"); } protected void onStart() { Log.d("BUHOO", ":::: onStart ::::"); mGoogleApiClient.connect(); super.onStart(); } protected void onStop() { Log.d("BUHOO", ":::: onStop ::::"); mGoogleApiClient.disconnect(); super.onStop(); } @Override protected void onPause() { Log.d("BUHOO", ":::: onPause ::::"); super.onPause(); LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); } @Override public void onResume() { Log.d("BUHOO", ":::: onResume ::::"); super.onResume(); if (mGoogleApiClient.isConnected() /*&& !mRequestingLocationUpdates*/) { startLocationUpdates(); } } protected void startLocationUpdates() { try { Log.d("BUHOO", ":::: startLocationUpdates ::::"); LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } catch(SecurityException e) { StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); Log.d("BUHOO", " ERROR onLocationChanged "+errors.toString()); } } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d("BUHOO", ":::: onConnectionFailed ::::"); } @Override public void onLocationChanged(Location location) { Log.d("BUHOO", "onLocationChanged:::::: "+location.getLatitude()+" longitud: "+location.getLongitude()); lat = location.getLatitude(); lon = location.getLongitude(); onMapReady(mMap); } /* @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { Log.d("BUHOO", ":::: onProviderEnabled ::::"); } @Override public void onProviderDisabled(String provider) { Log.d("BUHOO", ":::: onProviderDisabled ::::"); }*/ private class llamarServicio extends AsyncTask<String, Void, String> { Utiles utiles = new Utiles(); protected String doInBackground(String... urls) { return utiles.readJSONFeed(urls[0]); } protected void onPostExecute(String result) { try { Log.d("BUHOO", "result:::::: "+result); JSONObject mainResponseObject = new JSONObject(result); try { String error = mainResponseObject.getString("error"); if("0".equals(error)) { JSONObject polyObj = new JSONObject(mainResponseObject.getString("poligono")); String puntos = polyObj.getString("puntos"); List<String> puntosList = Arrays.asList(puntos.split(",")); for(Iterator it = puntosList.iterator(); it.hasNext(); ) { String str = (String) it.next(); String[] latlon = str.split(" "); double lati = Double.parseDouble(latlon[0].replaceAll("\"", "")); double longi = Double.parseDouble(latlon[1].replaceAll("\"", "")); comunidad.add(new LatLng(lati, longi)); //Log.d("BUHOO", "lati:::::: "+lati+" ... "+longi); } Log.d("BUHOO"," onPostExecute cantidad latlongs: "+comunidad.getPoints().size()); onMapReady(mMap); } else { Log.d("CREATION", " ---- error inesperdo: " ); } } catch (Exception e) { e.printStackTrace(); StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); Log.d("CREATION", "tratando el JSON: "+errors.toString()); } } catch (Exception e) { StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); Log.d("CREATION", "errorrrr onPostExecute: "+errors.toString()); } } } /** * 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. */ @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // Add a marker in Sydney and move the camera if(lat != 0.0 && lon != 0.0) { LatLng myPos = new LatLng(lat, lon); mMap.clear(); mMap.getUiSettings().setZoomControlsEnabled(true); mMap.getUiSettings().setCompassEnabled(true); mMap.getUiSettings().setMyLocationButtonEnabled(true); mMap.getUiSettings().setZoomGesturesEnabled(true); mMap.getUiSettings().setMapToolbarEnabled(true); mMap.addMarker(new MarkerOptions().position(myPos).title("MI POSICION ACTUAL")); float zoomLevel = 17; //This goes up to 21 //Polygon polygon = mMap.addPolygon(comunidad); Log.d("BUHOO"," PINTANDO MAPA cantidad latlongs: "+comunidad.getPoints().size()); if(comunidad.getPoints().size() > 0) { mMap.addPolygon(comunidad/*.fillColor(Color.BLUE)*/); } mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myPos, zoomLevel)); } else { LatLng sydney = new LatLng(-34, 151); mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); Log.d("BUHOO", "PINTO SYDNEY"); } } public static class GPSCheck extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { LocationManager locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE); if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Log.d("BUHOO", " :D IS ON!!!!!!!!!!!!!!!!!!!"); } else { Log.d("BUHOO", " :( GPS TURNED OFF !!!!!!!!!!!!!!!!!!!"); } } } }
解决方案You can achive this by Setting up a Broadcast Receiver that gets fired whenever the GPS of your device turns on/off
Steps:
1. First of all create a class GPS which extend BroadcastReceiver
public class GPSCheck extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { LocationManager locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE); if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { } else { Toast.makeText(context, "Please switch on the GPS", Toast.LENGTH_LONG).show(); } } }
2. And then mention this class in your AndroidManifest.xml file
<receiver android:name="com.yourpackagename.example.GPSCheck" > <intent-filter> <action android:name="android.location.PROVIDERS_CHANGED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
3. Do not forget to add this permission also
<uses-permission android:name="android.permission.ACCESS_GPS" />
这篇关于如何检测用户是否禁用GPS(Android - Play服务)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文