2014-09-24 4 views
1

im застрял с лат и долго: |Googlemap, широта и долгота

Что я делаю: им с помощью LocationManager для моей текущей получаю позицию (я сделал диалог ... которые показывают мне экран загрузку при загрузке

public void onLocationChanged(Location loc) 

но .. им установлен журнал .. или только простой сообщение .. я никогда не получаю запрос от этой функции.

Но если я использую фрагмент googlemap, там я нажимаю кнопку в правой части вверху, и она мгновенно отображается в моем текущем местоположении .. Как быть правильной в этой ситуации? ? Как получить местонахождение (lat и long)?

им просто stucked :(

public class getLocation implements LocationListener 
    { 
     public getLocation() 
     { 
      dialog = new ProgressDialog(MainActivity.this); 
      dialog.setMessage("Loading GPS Information"); 
      dialog.setCancelable(true); 
      dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      dialog.show(); 
      lm = (LocationManager) getSystemService(LOCATION_SERVICE); 
      new Thread() { 
       public void run() { 
        runOnUiThread(new Runnable() { 

         public void run() { 

      boolean enabled = lm 
         .isProviderEnabled(LocationManager.GPS_PROVIDER); 


        if (!enabled) { 
         Toast.makeText(MainActivity.this, "GPS NOT ENABLED" , Toast.LENGTH_SHORT).show(); 
         Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
         startActivity(intent); 
        } else{ 
         Toast.makeText(MainActivity.this, "GPS ENABLED" , Toast.LENGTH_SHORT).show(); 
         if(lm.getLastKnownLocation(LocationManager.GPS_PROVIDER) != null){ 
          Toast.makeText(MainActivity.this, "LAST LOCATION " , Toast.LENGTH_SHORT).show(); 
         } 
         else{ 
          Toast.makeText(MainActivity.this, "Last location unknown ", Toast.LENGTH_SHORT).show(); 
         } 
         lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 
           0, getLocation.this); 
        } 
         } 
         }); 
        } 
        }.start(); 

        handler = new Handler() { 
          public void handleMessage(android.os.Message msg) { 
           dialog.dismiss(); 

          }; 
         }; 

     } 
     @Override 
     public void onLocationChanged(Location loc) { 
      // TODO Auto-generated method stub = 
      if(loc!=null){ 
      if(apress){ 
       at.setText("Lat = "+loc.getLatitude()+" | Long = "+loc.getLongitude()); 
       apress=false; 
       Toast.makeText(MainActivity.this, "OnLocationChanged GPS" , Toast.LENGTH_SHORT).show(); 
       latG=loc.getLatitude(); 
       longG=loc.getLongitude(); 
       showA.setEnabled(true); 
       handler.sendEmptyMessage(0); 
      } 
      }else{ 
       Toast.makeText(MainActivity.this, "OnLocationChanged GPS Location - null" , Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onProviderDisabled(String arg0) { 
      // TODO Auto-generated method stub 
      Toast.makeText(MainActivity.this, "ON PROVIDER DISABLED "+arg0 , Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onProviderEnabled(String arg0) { 
      // TODO Auto-generated method stub 
      Toast.makeText(MainActivity.this, "ON PROVIDER ENABLED "+arg0 , Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onStatusChanged(String arg0, int arg1, Bundle arg2) { 
      Toast.makeText(MainActivity.this, "ON STATUS CHANGED "+arg0 , Toast.LENGTH_SHORT).show(); 

     } 

    } 

и в этой функции

public void onLocationChanged(Location loc) { 

я никогда не получить правильный вызов .. это значит, если я здесь добавление Log.e (или что-то), чем он никогда не показывают :(

+0

Можете ли вы добавить все коды классов –

+0

hey peter! , если я правильно понял ваши вопросы. Вам нужно удалить «Показать кнопку местоположения» из фрагмента. Вторая вещь, которую вы хотите знать своей латы и долго –

+0

@TarunSharma нет, я хочу получить cur LAT и LONG с кодом не на карте, им просто не понятно, почему он не работает, НО на карте «Показать кнопку местоположения», как u sayd - эта кнопка всегда показывает мне, где я: (((((я хочу это по коду – Peter

ответ

0

Предлагаю вам использовать этот подкласс;

private class GPSLocationListener implements LocationListener, 
     GpsStatus.Listener { 
    boolean isGPSFix; 

    public void onGpsStatusChanged(int event) { 
     switch (event) { 
     case GpsStatus.GPS_EVENT_SATELLITE_STATUS: 
      if (mLastLocation != null) 
       isGPSFix = (SystemClock.elapsedRealtime() - lastGPStime) < 3000; 
      if (isGPSFix) { // A fix has been acquired. 
       Toast toast = Toast.makeText(GPSLocationService.this, "GPS has a fix.", Toast.LENGTH_SHORT); 
       toast.setGravity(Gravity.CENTER, 0, 0); 
       toast.show(); 
      } else { // The fix has been lost. 
       Toast toast = Toast.makeText(GPSLocationService.this, "GPS DOES NOT have a fix.", Toast.LENGTH_SHORT); 
       toast.setGravity(Gravity.CENTER, 0, 0); 
       toast.show(); 
      } 
      break; 
     case GpsStatus.GPS_EVENT_FIRST_FIX: 
      Toast toast = Toast.makeText(GPSLocationService.this, "GPS got first fix.", Toast.LENGTH_SHORT); 
      toast.setGravity(Gravity.CENTER, 0, 0); 
      toast.show(); 
      isGPSFix = true; 
      break; 
     } 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     if(apress){ 
      try { 
       latG = location.getLatitude(); 
       longG = location.getLongitude(); 
       at.setText("Lat = "+latG +" | Long = "+longG); 
       apress=false; 
       showA.setEnabled(true); 
      } catch (Exception e) { 
       latG = 0.0; 
       longG = 0.0; 
      } 
     } 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     String statusDescription = "unknown"; 
     switch (status) { 
     case LocationProvider.OUT_OF_SERVICE: 
      statusDescription = "OUT_OF_SERVICE"; 
      break; 
     case LocationProvider.AVAILABLE: 
      statusDescription = "AVAILABLE"; 
      break; 
     case LocationProvider.TEMPORARILY_UNAVAILABLE: 
      statusDescription = "TEMPORARILY_UNAVAILABLE"; 
      break; 
     } 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     Toast toast = Toast.makeText(GPSLocationService.this, "Your GPS is opened", Toast.LENGTH_SHORT); 
     toast.setGravity(Gravity.CENTER, 0, 0); 
     toast.show(); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     Toast toast = Toast.makeText(GPSLocationService.this, "Your GPS is closed", Toast.LENGTH_SHORT); 
     toast.setGravity(Gravity.CENTER, 0, 0); 
     toast.show(); 
    } 
} 

Затем позвоните этому классу из вашего MainActivity с кодами;

GPSLocationListener gpsLocationListener = new GPSLocationListener(); 
// get the system manager 
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, gpsLocationListener); 

Не забудьте добавить <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> на манифеста.

+0

жесткий код .. для чего? – Peter

+0

для чистого кода. Вы устанавливаете поток в конструкторе класса getLocation, и в этом потоке вы снова вызываете класс getLocation с помощью 'lm.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, getLocation.this);'. Итак, где вы сначала назовите класс getLocation? –

+0

в основном. – Peter

0

Ну ... код работает правильно. Просто нужно оставаться под небом для правильной работы. Я был дома. Вот почему я не получаю координаты (lat и long. спасибо всем ...