2016-11-24 1 views
0

im Testen meiner App in einem echten Gerät, und ein Fehler bekommen und nicht wissen, wie zu beheben.Android GetLocation bei der Installation App ist 0.0

Meine App fragt nach der Erlaubnis, auf dem Android-Gerät zu positionieren, wenn die Anwendung fragt, um den Zugriff zu ermöglichen. Um die Position zum ersten Mal zu finden, klicken Sie auf den Standort-Button.

Mein Problem ist dies: Wenn GPS deaktiviert ist, findet die App nicht die richtige Position, auch nach der Aktivierung, als Breite und Länge 0.0.

Wenn Sie die Taste, die Kontrollen App klicken, wenn er aktiviert wird und fragt, zu aktivieren, aber auch den Standort zu aktivieren ist die gleiche wie 0,0

Wenn Sie die App installieren mit GPS aktiviert ist, tritt dieses Problem nicht auf.

Kann mir jemand helfen?

im Code zu Standort-Taste

public void btnlocalizacao(View view) { 
     gps = new GPSTracker(MainActivity.this); 

    // check if GPS enabled 
       if (gps.canGetLocation()) { 
        double latitude = gps.getLatitude(); 
        double longitude = gps.getLongitude(); 
        CameraPosition newCamPos = new CameraPosition(new LatLng(latitude, longitude), 
          15.5f, 
          googleMap.getCameraPosition().tilt, //use old tilt 
          googleMap.getCameraPosition().bearing); //use old bearing 
        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(newCamPos), 2000, null); 

       } else { 
        gps.showSettingsAlert(); 
       } 
} 

und das ist die GPS-Klasse

public class GPSTracker extends Service implements LocationListener { 

    private final Context mContext; 

    // flag for GPS status 
    boolean isGPSEnabled = false; 

    // flag for network status 
    boolean isNetworkEnabled = false; 

    // flag for GPS status 
    boolean canGetLocation = false; 

    Location location; // location 
    double latitude; // latitude 
    double longitude; // longitude 

    // The minimum distance to change Updates in meters 
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1; // 10 meters 

    // The minimum time between updates in milliseconds 
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 ; // 1 minute 

    // Declaring a Location Manager 
    protected LocationManager locationManager; 
    Criteria criteria = new Criteria(); 

    public GPSTracker(Context context) { 
     this.mContext = context; 
     getLocation(); 
    } 

    public Location getLocation() { 
     try { 
      locationManager = (LocationManager) mContext 
        .getSystemService(LOCATION_SERVICE); 

      // getting GPS status 
      isGPSEnabled = locationManager 
        .isProviderEnabled(LocationManager.GPS_PROVIDER); 

      // getting network status 
      isNetworkEnabled = locationManager 
        .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

      if (!isGPSEnabled && !isNetworkEnabled) { 
       // no network provider is enabled 
      } else { 
       this.canGetLocation = true; 
       // First get location from Network Provider 
       if (isNetworkEnabled) { 
        locationManager.requestLocationUpdates(
          LocationManager.NETWORK_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        Log.d("Network", "Network"); 
        if (locationManager != null) { 
         location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, true)); 
         //location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
          Log.d("Localização", latitude + " " + longitude); 
         } 
        } 
       } 
       // if GPS Enabled get lat/long using GPS Services 
       if (isGPSEnabled) { 
        if (location == null) { 
         locationManager.requestLocationUpdates(
           LocationManager.GPS_PROVIDER, 
           MIN_TIME_BW_UPDATES, 
           MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
         Log.d("GPS Enabled", "GPS Enabled"); 
         if (locationManager != null) { 
          location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false)); 
          //location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
          if (location != null) { 
           latitude = location.getLatitude(); 
           longitude = location.getLongitude(); 
           Log.d("Localização", latitude + " " + longitude); 
          } 
         } 
        } 
       } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return location; 
    } 

    /** 
    * Stop using GPS listener 
    * Calling this function will stop using GPS in your app 
    * */ 
    public void stopUsingGPS(){ 
     if(locationManager != null){ 
      locationManager.removeUpdates(GPSTracker.this); 
     } 
    } 

    /** 
    * Function to get latitude 
    * */ 
    public double getLatitude(){ 
     if(location != null){ 
      latitude = location.getLatitude(); 
     } 

     // return latitude 
     return latitude; 
    } 

    /** 
    * Function to get longitude 
    * */ 
    public double getLongitude(){ 
     if(location != null){ 
      longitude = location.getLongitude(); 
     } 

     // return longitude 
     return longitude; 
    } 

    /** 
    * Function to check GPS/wifi enabled 
    * @return boolean 
    * */ 
    public boolean canGetLocation() { 
     return this.canGetLocation; 
    } 

    /** 
    * Function to show settings alert dialog 
    * On pressing Settings button will lauch Settings Options 
    * */ 
    public void showSettingsAlert(){ 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); 

     // Setting Dialog Title 
     alertDialog.setTitle("ALerta de GPS"); 

     // Setting Dialog Message 
     alertDialog.setMessage("GPS não esta ativado, gostaria de ativar?"); 

     // On pressing Settings button 
     alertDialog.setPositiveButton("Configurações", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog,int which) { 
       Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       mContext.startActivity(intent); 
      } 
     }); 

     // on pressing cancel button 
     alertDialog.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 

     // Showing Alert Message 
     alertDialog.show(); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 

} 

Antwort

1

Mein Problem ist folgendes: Wenn GPS deaktiviert ist, wird die App finden nicht das Recht Position, auch nach der Aktivierung, als Breiten- und Längengrad 0.0.

Es funktioniert alles wie vorgesehen. Die Tatsache, dass Sie eine Standortgenehmigung erhalten, bedeutet, dass Sie den Standort IF erhalten dürfen und nur IF es ist verfügbar. Es bedeutet nichts mehr, vor allem es NICHT garantiert noch bedeuten, dass Sie jemals irgendwelche Koordinaten aus dem System bekommen (Benutzer kann, z. B. einfach nicht GPS-Empfänger verwenden).

+0

Aber warum dies nicht auftreten, wenn das GPS aktiviert ist? – reemy

+0

Da GPS aktiviert ist. –

+0

ok, ich habe es ... danke @Marcin – reemy

Verwandte Themen