2016-03-29 5 views
1

Ich versuche, einen Dienst für mein Gyroscope in Android zu erstellen, aber ich habe weiterhin Probleme mit getSystemService.Problem mit getSystemService (SENSOR_SERVICE) - Bereits implementierter Kontext

Ich habe in den Foren gesucht und versucht, eine Lösung zu finden, aber in den meisten Fällen ist es nur eine Frage des Importierens des Kontexts aus der MainActivity.

public class GyroData implements SensorEventListener { 

private final Context mContext; 
protected SensorManager mSensorManager; 

public GyroData(Context context) { 
    mContext = context; 
    mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); 
} 

Wie Sie oben sehen können, habe ich das schon gemacht, aber ich bekomme immer noch den folgenden Fehler.

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{sw806f16.p8project/sw806f16.p8project.CameraActivity}: java.lang.IllegalStateException: System services not available to Activities before onCreate() 
at sw806f16.p8project.GyroData.setupSensorManager(GyroData.java:24) 

EDIT: Hinzugefügt Code aus MainActivity

public class CameraActivity extends Activity implements LocationListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 
public static final String TAG = "CameraActivity"; 

LocationService gps = new LocationService(this); 
GyroData gyro = new GyroData(this); 
+0

Das Problem liegt darin, wo Sie "GyroData" instanziieren, nicht die "GyroData" -Klasse selbst. –

+0

Könnten Sie das weiter erklären, weil ich es nicht wirklich sehe? –

+0

Bitte geben Sie den entsprechenden Code von 'MainActivity' ein. –

Antwort

1

Sie Instanziieren GyroData in CameraActivity ‚s <init> Verfahren; das heißt, außerhalb jeder Methode. Dies geschieht, bevor definierte Methoden aufgerufen werden, einschließlich onCreate() und der super.onCreate()-Aufruf darin, der auftreten muss, bevor Sie Systemdienste anfordern können, wie Sie in GyroData Konstruktor sind.

Verschieben Sie einfach die gyro Initialisierung auf onCreate(), nach dem Anruf an super.onCreate(). Sie sollten das gleiche mit der gps Initialisierung tun.

Verwandte Themen