Передача координат GPS в другое действие в Android - PullRequest
1 голос
/ 02 февраля 2012

У меня есть приложение, которое отображает координаты GPS в форме тоста, но я пытаюсь добиться сохранения этих координат и отображения их в следующем упражнении. Проблема в том ... Я не могу! Я работал над этим в течение последних 4 дней и не знаю, как это сделать. Если у кого-то есть какие-либо предложения, я буду очень признателен. Вот посмотрите на код:

public class GPSActivity extends Activity{

double longitude    = 0;
double latitude     = 0;

String s1 = "latitude";
String s2 = "longitude";

public  Intent intent;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

intent = new Intent(this, Display.class);

/* Use the LocationManager class to obtain GPS locations */
LocationManager myLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener myLocationListener = new MyLocationListener();

myLocationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, myLocationListener);} // end activity


/* Class My Location Listener */
public class MyLocationListener implements LocationListener {


@Override
public void onLocationChanged(Location loc) {

       longitude = loc.getLatitude();
       latitude =  loc.getLongitude();

       String text = "My current location is: " + "Latitud = " + loc.getLatitude() + "Longitud = " + loc.getLongitude();



       Toast.makeText( getApplicationContext(), text, Toast.LENGTH_SHORT).show();

       Bundle extras = new Bundle();

       extras.putDouble("long", longitude);
       extras.putDouble("lat", latitude);

       intent.putExtras(extras);

       startActivity(intent); }

@Override
public void onProviderDisabled(String provider){

Toast.makeText( getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT ).show();
}


@Override
public void onProviderEnabled(String provider) {

Toast.makeText( getApplicationContext(), "Gps Enabled", Toast.LENGTH_SHORT).show();
}


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

}} // End GPS activity

Ответы [ 2 ]

0 голосов
/ 27 июня 2012

Может быть, вам стоит создать такой класс

String lon; //variable Lon to pass to another activity
String lat; //variable Lat to pass to another activity
public void ALoc(double lon, double lat){
    this.lon = String.valueOf(lon);
    this.lat = String.valueOf(lat);
}

Затем вы помещаете это в свой onLocationChanged () или что бы передать последние координаты в String Lon и Lat, которые объявлены выше.

Location lokasiku = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//...
//blabla code
//...
ALoc(lokasiku.getLongitude(), lokasiku.getLatitude());

И в кнопке, чтобы перейти к следующему действию, которое использует этот параметр, вы должны сделать это, передав параметр через намерение onClick () или как. Предположим, у вас есть макет GoButton с id: button_Go.

    GoButton = (Button) findViewById(R.id.button_Go);
    GoButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(RecentActivity.this, NextActivity.class);
            intent.putExtra("lon", lon);
            intent.putExtra("lat", lat);
            RecentActivity.this.startActivity(intent);
        }
    });

И теперь, на NextActivity, вы должны получить данные, которые мы передаем, как описано выше, выглядит так, поместить их в onCreate ().

    String lon = getIntent().getExtras().getString("lon");
    String lat = getIntent().getExtras().getString("lat");

Надеюсь, это поможет, по крайней мере, это уже работает на меня. : D

0 голосов
/ 03 февраля 2012

Я бы не стал хранить Intent в качестве переменной-члена.Создайте его там, где вы хотите его запустить.

Bundle extras = new Bundle();
extras.putDouble("long", longitude);
extras.putDouble("lat", latitude);

Intent newIntent = new Intent(GPSActivity.this, Display.class);
newIntent.putExtras(extras);
startActivity(newIntent);

Также определите свою активность отображения в AndroidManifest.xml

<manifest . . . >
    . . .
    <application . . .>
        <activity android:name=".Display"
                  . . . >
            . . .
        </activity>
    </application>
</manifest>
...