Comment utiliser getSystemService dans une classe hors activité (LocationManager)?

J’ai du mal à décharger des tâches de la principale méthode Activities OnCreate sur une autre classe pour faire le gros du travail.

Lorsque j’essaie d’appeler getSystemService à partir de la classe non-activité, une exception est levée.

Toute aide serait grandement appréciée 🙂

lmt.java:

package com.atClass.lmt; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import android.location.Location; public class lmt extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fyl lfyl = new fyl(); Location location = lfyl.getLocation(); Ssortingng latLongSsortingng = lfyl.updateWithNewLocation(location); TextView myLocationText = (TextView)findViewById(R.id.myLocationText); myLocationText.setText("Your current position is:\n" + latLongSsortingng); } } 

fyl.java

 package com.atClass.lmt; import android.app.Activity; import android.os.Bundle; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; import android.content.Context; public class fyl { public Location getLocation(){ LocationManager locationManager; Ssortingng context = Context.LOCATION_SERVICE; locationManager = (LocationManager)getSystemService(context); Ssortingng provider = LocationManager.GPS_PROVIDER; Location location = locationManager.getLastKnownLocation(provider); return location; } public Ssortingng updateWithNewLocation(Location location) { Ssortingng latLongSsortingng; if (location != null){ double lat = location.getLatitude(); double lng = location.getLongitude(); latLongSsortingng = "Lat:" + lat + "\nLong:" + lng; }else{ latLongSsortingng = "No Location"; } return latLongSsortingng; } } 

Vous devez transmettre votre contexte à votre classe fyl.
Une solution consiste à créer un constructeur comme celui-ci pour votre classe fyl :

 public class fyl { Context mContext; public fyl(Context mContext) { this.mContext = mContext; } public Location getLocation() { -- locationManager = (LocationManager)mContext.getSystemService(context); -- } } 

Donc, dans votre classe d’activité, créez l’object de fyl dans la fonction onCreate comme ceci:

 package com.atClass.lmt; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import android.location.Location; public class lmt extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fyl lfyl = new fyl(this); //Here the context is passing Location location = lfyl.getLocation(); Ssortingng latLongSsortingng = lfyl.updateWithNewLocation(location); TextView myLocationText = (TextView)findViewById(R.id.myLocationText); myLocationText.setText("Your current position is:\n" + latLongSsortingng); } } 

Vous pouvez aller pour cela:

 getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); 

Une façon de contourner ce problème est de créer une classe statique pour les instances. Je l’ai beaucoup utilisé dans AS3 J’ai aussi bien travaillé pour moi dans le développement Android.

Config.java

 public final class Config { public static MyApp context = null; } 

MyApp.java

 public class MyApp extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Config.context = this; } ... } 

Vous pouvez ensuite accéder au contexte ou en utilisant Config.context

 LocationManager locationManager; Ssortingng context = Context.LOCATION_SERVICE; locationManager = Config.context.getSystemService(context); 

Je ne sais pas si cela va aider, mais je l’ai fait:

 LocationManager locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE); 
 (LocationManager) ((lmt) new Activity()).getSystemService(context); 

Essayez ce code. Cela ne fonctionnera que si vous avez lancé une activité avant d’appeler cette ligne de code. Comme l’activité doit être créée et en cours d’exécution.