2016-06-19 11 views
0

Я создаю приложение, которое отправляет текущее местоположение GPS на сохраненные номера. Но, местоположение всегда было 0.0, 0.0.Расположение GPS всегда отображается как 0.0, 0.0 (LocationListener реализован)

Вот код:

public class ContactsList extends AppCompatActivity { 

Button addContacts; 
Button emergencyButton; 

ListView listView; 

ArrayList<HashMap<String, String>> contactsList; 
ArrayList<Contact> contactobjectsList; 
ArrayList<String> phonenumbersList; 

DatabaseHelper databaseHelper = new DatabaseHelper(ContactsList.this); 

LocationManager locationManager; 
LocationListener locationListener; 

double latitudeVal, longitudeVal; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_contacts_list); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    addContacts = (Button) findViewById(R.id.moveButton); 
    listView = (ListView) findViewById(R.id.contactslistView); 
    emergencyButton = (Button) findViewById(R.id.emergency_button); 

    contactobjectsList = new ArrayList<Contact>(); 
    contactobjectsList = databaseHelper.getContacts(); 

    phonenumbersList = new ArrayList<String>(); 
    phonenumbersList = databaseHelper.getNumbers(); 

    contactsList = new ArrayList<HashMap<String, String>>(); 
    contactsList = databaseHelper.getValues(); 

    // For GPS: 

    locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
    locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      if (location != null) {     

       latitudeVal = location.getLatitude(); 
       longitudeVal = location.getLongitude(); 
      } 
     } 

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

     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      Toast toast = Toast.makeText(getApplicationContext(), "GPS Enabled", Toast.LENGTH_LONG); 
      toast.show(); 


     } 

     @Override 
     public void onProviderDisabled(String provider) { 

      Toast toast = Toast.makeText(getApplicationContext(), "Enable GPS", Toast.LENGTH_LONG); 
      toast.show(); 
      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      startActivity(intent); 


     } 
    }; 


    ListAdapter listAdapter = new SimpleAdapter(ContactsList.this, contactsList, R.layout.customlayout, 
      new String[]{DatabaseHelper.COLUMN_ID, DatabaseHelper.COLUMN_PERSONNAME, DatabaseHelper.COLUMN_PHONENUMBER}, 
      new int[]{R.id._idcust, R.id.personnamecust, R.id.phonenumbercust}); 

    listView.setAdapter(listAdapter); 


    addContacts.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent move = new Intent(ContactsList.this, AddContact.class); 
      startActivity(move); 


     } 
    }); 


    emergencyButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListener); 



      String printLat = Double.toString(latitudeVal); 
      String printLon = Double.toString(longitudeVal); 

      Toast toast = Toast.makeText(getApplicationContext(),printLat+", "+printLon,Toast.LENGTH_LONG); 
      toast.show(); 

      // sendSMS(phonenumbersList); 


     } 
    }); 



} 

По какой-то причине, значения по умолчанию для широты и долготы, как указано в классе LocationListener являются те, которые возвращаются (0,0, 0,0). Я действительно не знаю, что не так с моим кодом, и я бы серьезно оценил некоторую помощь на этом этапе.

ответ

0

Вы должны добавить эту строку

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListener); 

только после этой линии

locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

, а не в emergencyButton.setOnClickListener

+0

Это не поможет –

+0

это может помочь вам http://stackoverflow.com/questions/17519198/how-to-get-the-current-location-latitude-and-longitude-in-android –

1
<uses-permission 
    android:name="android.permission.ACCESS_FINE_LOCATION" 
    android:maxSdkVersion="22" /> 

Удалить андроида: maxSdkVersion = "22" из манифеста, решил проблему или targetSdkVersion> 21, тогда вы должны реализовать разрешение времени выполнения для ACCESS_FINE_LOCATION.