如何检测用户是否禁用GPS(Android - Play服务) [英] How can I detect if user disable GPS (Android - Play Services)

查看:138
本文介绍了如何检测用户是否禁用GPS(Android - Play服务)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用gms.location.LocationListener(Google Play Services)来获取用户的位置。它工作正常,但我想要检测每当用户禁用或启用他/她的GPS。
如图所示。





当我打开/关闭位置时,不会调用任何方法。
当我切换应用程序并返回到我的应用程序时,将调用以下方法:
$ b


  • onStart

  • onResume

  • onConnected



但是我需要在用户转动时调用该事件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类。
    $ b

      public 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屋!

    查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆