Android locationManager Исключение нулевого указателя? (как передать контекст?) - PullRequest
0 голосов
/ 11 октября 2011

У меня проблема здесь, и я не могу заставить ее работать ... Я хочу получить последние позиции GPS, но все, что я получаю, это исключение нулевого указателя.Он работает с GPSActivity первого класса, но не со вторым SmsReceiver.

Я читал, что это возможно, потому что я должен передать Контекст во 2-й класс, но я не знаю, как ... пожалуйста, помогите!

А вот и код:

GPSActivity.class:

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class GPSActivity extends Activity {
  long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
  long MINIMUM_TIME_BETWEEN_UPDATES = 10000; // in Milliseconds

  LocationManager locationManager;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);  
    locationManager = 
      (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.getAllProviders();
    locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 
            MINIMUM_TIME_BETWEEN_UPDATES, 
            MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
            new MyLocationListener());

  }    

  public void showCurrentLocation() {
    Location location = 
      locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    if (location != null) {
      String message = String.format(
              "Current Location \n Longitude: %1$s \n Latitude: %2$s",
              location.getLongitude(), location.getLatitude());
      Toast.makeText(GPSActivity.this, message,
              Toast.LENGTH_LONG).show();
    }
  }
}

(я немного урезал код)

Теперь я могу вызвать showCurrentLocation и этопоказывает мне значения long и lat.

Как я могу сделать это здесь:

SmsReceive.class (при получении смс отправьте координаты GPS)

import ...
public class SmsReceiver extends BroadcastReceiver
{   


  @Override
  public void onReceive(Context context, Intent intent) 
  {
    GPSActivity myGPS;
    myGPS = new GPSActivity();

    //---get the SMS message passed in---
    Bundle bundle = intent.getExtras();        
    SmsMessage[] msgs = null;
    if (bundle != null) {
      //HERE I GET THE NULL POINTER EXCEPTION
      Location loc =
        myGPS.locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
      double varLong = loc.getLongitude();
      double varLat = loc.getLatitude();
      String locationData = "LONG: " + varLong+ " LAT: " + varLat;
      Toast.makeText(context, locationData, Toast.LENGTH_SHORT).show();
    }
  }
}

спасибо!

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

объявите новый locationManager в классе smsReceiver и используйте следующие строки

mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
 Location loc = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
0 голосов
/ 11 октября 2011

Создайте класс One, который расширяет Сервис, и в него реализуйте задачу GPS, потому что в Activity, которая остановит / приостановит / уничтожит, и вы не сможете получить каждый раз.Сервис будет работать в фоновом режиме, так что вы сможете в любое время получить координату GPS и определить объект местоположения как общедоступный статический, чтобы вы могли использовать его в любом месте в своем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...