2016-06-07 6 views
-1

Ich habe eine App, wo ich den Standort des Benutzers erhalten muss. Also habe ich am Anfang der App überprüft, ob das GPS eingeschaltet ist oder nicht. Wenn ja, wird sich der Benutzer einfach in der App anmelden. Ist dies nicht der Fall, wird der Warndialog angezeigt, in dem der Benutzer aufgefordert wird, ihn zu aktivieren. Wenn der Benutzer dies verweigert, wird die App geschlossen. Wenn der Benutzer die Aktivierung von GPS annimmt, wird der Benutzer zu den Standorteinstellungen navigiert. Ich kann jedoch nicht verfolgen, ob der Benutzer den GPS eingeschaltet hat oder nicht, nachdem der Benutzer die Standorteinstellungen erreicht hat. Wie mache ich das ? Das ist mein Alarmfeldcode:Wie überprüft man, ob der Benutzer den GPS-Dienst während der Laufzeit in Android aktiviert oder deaktiviert hat?

if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      AlertDialog dialog = new  AlertDialog.Builder(login.this).setTitle("GPS NOT ENABLED!") 
        .setMessage("Plese, turn on your gps to login to the app") 
        .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 

          startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 

          dialog.dismiss(); 


         } 
        }) 
        .setNegativeButton("No", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 

          dialog.dismiss(); 

          finish(); 

         } 
        }) 

        .setOnKeyListener(new DialogInterface.OnKeyListener() { 
         @Override 
         public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
          if (keyCode == KeyEvent.KEYCODE_BACK && 
            event.getAction() == KeyEvent.ACTION_UP && 
            !event.isCanceled()) { 
           dialog.dismiss(); 

           finish(); 

           return true; 
          } 
          return false; 
         } 
        }) 
        .show(); 
      dialog.setCanceledOnTouchOutside(false); 

     } 

Antwort

1

Eine Möglichkeit, die ich unten in Mode implementiert habe.

1.Erstellen ein interface:

public interface GpsInterface { 
    void onGpsStatusChanged(boolean gpsStatus); 
} 

2.Create ein BroadcastReceiver:

public class GpsListener extends BroadcastReceiver { 

private GpsInterface gpsInterface = null; 
private Context context; 
public GpsListener(){} 

public GpsListener(Context ctx, GpsInterface gpsInterface){ 
    this.gpsInterface = gpsInterface; 
    this.context = ctx; 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     gpsInterface.onGpsStatusChanged(true); 
    }else{ 
     gpsInterface.onGpsStatusChanged(false); 
    } 
} 
} 

3.Implement die GpsInterface in Ihrer Klasse/Aktivität

public class MyActivity extends Activity implements GpsInterface{ 
    private GpsListener gpsListener; 
    private boolean isGpsOn; 

    //other stuff 
} 

    //in onCreate() 
    IntentFilter mfilter = new IntentFilter(
      "android.location.PROVIDERS_CHANGED"); 
    gpsListener = new GpsListener(getActivity(), this); 
    registerReceiver(gpsListener, mfilter); 

Umsetzung der onGpsStatusChanged() Methode in der Aktivität

@Override 
public void onGpsStatusChanged(boolean gpsStatus) { 
    Logger.e("GPS STATUS", "ON " + gpsStatus); 
    isGpsOn = gpsStatus; 
} 

4.Unregister Ihre Rundfunkempfänger in onDestroy()

@Override 
public void onDestroy() { 
    unregisterReceiver(gpsListener); 
} 

Hope this helfen.

0

Verwenden Sie den folgenden Code, um zu überprüfen, ob GPS-Provider und Netzwerkanbieter aktiviert sind oder nicht.

LocationManager lm =  (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
boolean gps_enabled = false; 
boolean network_enabled = false; 

try { 
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
} catch(Exception ex) {} 

try { 
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
} catch(Exception ex) {} 

if(!gps_enabled && !network_enabled) { 
// notify user 
AlertDialog.Builder dialog = new AlertDialog.Builder(context); 
    dialog.setMessage(context.getResources().getString(R.string.gps_network_not_enabled)); 
    dialog.setPositiveButton(context.getResources().getString(R.string.open_location_settings), new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface paramDialogInterface, int  paramInt) { 
      // TODO Auto-generated method stub 
      Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      context.startActivity(myIntent); 
      //get gps 
     } 
    }); 
dialog.setNegativeButton(context.getString(R.string.Cancel), new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    dialog.show();  
} 
0

Hier ist eine saubere Möglichkeit, den GPS-Status während der Laufzeit zu überprüfen.

  1. erstellen Broadcast-Receiver

    private BroadcastReceiver mGPSConnectivityReceiver = new BroadcastReceiver() { 
        @Override 
        public void onReceive(Context context, Intent intent) { 
    
        LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    
        if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
    
        // GPS ON 
    
        } else { 
    
        // GPS OFF 
    
        } 
        } 
    }; 
    
  2. den Rundfunkempfänger in onStart Register()

    @Override 
    protected void onStart() { 
        super.onStart(); 
    
        registerReceiver(mGPSConnectivityReceiver, 
         new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION)); 
    
    } 
    
  3. Vergessen Sie nicht, den Empfänger in OnStop() zum Aufheben der Registrierung!

    @Override 
    protected void onStop() { 
        super.onStop(); 
    
        unregisterReceiver(mGPSConnectivityReceiver); 
    
    } 
    

    Dies ist wahrscheinlich die einfachste und sauberste Lösung für dieses Problem. Ich hoffe wirklich, dass es hilft!

Verwandte Themen