Witam wszystkich, zdaje się, że to mój pierwszy post 🙂
Męczę się z problemem od samego rana i nie mogę dojść do tego, co jest nie tak. Chodzi o zupełnie podstawowe odczytanie pozycji GPS. Postępując zgodnie z większością tutoriali, doszedłem do następującego kodu:
StalkerPDAActivity.java:
package com.hindus.stalkerpda;
import android.app.Activity;
import android.content.Context;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
public class StalkerPDAActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
}
}
MyLocationListener.java:
package com.hindus.stalkerpda;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.widget.Toast;
public class MyLocationListener implements LocationListener{
@Override
public void onLocationChanged(Location loc) {
// TODO Auto-generated method stub
loc.getLatitude();
loc.getLongitude();
String Text = "My current location is: \nLatitud = "+loc.getLatitude()+"Longitud = "+loc.getLongitude();
Toast tost = Toast.makeText(StalkerPDAActivity.this, Text, Toast.LENGTH_LONG);
tost.show();
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
}
Problem pojawia się w momencie konieczności przekazania Contextu dla "tosta". W obecnej postaci daje błąd: No enclosing instance of the type StalkerPDAActivity is accessible in scope
Gdy zastosuję (zgodnie z tutorialami) getApplicationContext(), otrzymuję: The method getApplicationContext() is undefined for the type MyLocationListener
Próbowałem przekazać Context przez konstruktor albo inną metodę, ale przez to, że to musi implementować LocationListener, sypało błędami. Jak w takim razie zaktualizować TextView czy Toasta z aktualną pozycją?
Rozwiązanie pewnie jest banalne, ale jakoś nie mogę niczego wymyślić.
Pozdrawiam!
EDYCJA:
OK, rozwiązanie znalezione. Wystarczy przekazać klasę w konstruktorze MyLocationListenera (robiłem tak wcześniej):
LocationListener mlocListener = new MyLocationListener(this);
Złapać ją w MyLocationListenerze:
private Context con;
private StalkerPDAActivity klasa;
public MyLocationListener(StalkerPDAActivity klasa){
this.con = klasa.getApplicationContext();
this.klasa = klasa;
}
I dopisać pusty konstruktor (bo inaczej jest zgłaszany jako undefined):
public MyLocationListener(){}