2010-11-13 2 views
0

Je suis nouveau dans le développement Android. Je développe une application qui à la réception d'un message SMS avec une chaîne de texte unique, le GPS est activé et commence à suivre l'emplacement du téléphone. Le problème que j'ai est avec la méthode getSystemService(). Je reçois l'erreur "The method getSystemService(String) is undefined for the type SmsReceiver", je crois que c'est parce qu'elle n'a pas de contexte. J'ai essayé d'ajouter un contexte dans mon code avec 'ctx', et cela supprime l'erreur, mais mon application se bloque chaque fois que je l'exécute sur mon téléphone. Le code de réception du SMS fonctionne correctement, et le code de suivi de localisation GPS fonctionne correctement s'il se trouve dans ma classe principale.Méthode non définie pour le type SmsReciever - contexte

Je ne comprends toujours pas complètement les contextes, quelqu'un peut-il m'aider s'il vous plaît?

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.telephony.gsm.SmsMessage; 
import android.widget.Toast; 

@SuppressWarnings("deprecation") 
public class SmsReceiver extends BroadcastReceiver { 
    LocationManager lm; 
    LocationListener loc; 
    Context ctx; 
    public SmsReceiver(Context c) { ctx = c; } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     //---get the SMS message passed in--- 
     Bundle bundle = intent.getExtras();   
     SmsMessage[] msgs = null; 
     String str = "";    
     if (bundle != null){ 
      //---retrieve the SMS message received--- 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length];    
      for (int i=0; i<msgs.length; i++){ 
       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);          
       str += msgs[i].getMessageBody().toString() + "\n";   
      } 

      Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
      if (msgs[0].getMessageBody().toString() == "Track"){ 
       enableGPS(); 
      } 
     }       
    } 

    public void enableGPS() { 
     lm = (LocationManager)ctx.getSystemService(Context.LOCATION_SERVICE); 
     loc = new mylocationlistener(); 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, loc); 
    } 

    public void disableGPS() { 
     lm.removeUpdates(loc); 
    } 

    private class mylocationlistener implements LocationListener { 
     @Override 
     public void onLocationChanged(Location location) { 
      String s = ""; 
      s += "\tTime: "  + location.getTime() + "\n"; 
      s += "\tLatitude: " + location.getLatitude() + "°\n"; 
      s += "\tLongitude: " + location.getLongitude() + "°\n"; 
      s += "\tAccuracy: " + location.getAccuracy() + " metres\n"; 
      s += "\tAltitude: " + location.getAltitude() + " metres\n"; 

      //Toast.makeText(SmsReceiver.this, s, Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onProviderDisabled(String arg0) { } 
     @Override 
     public void onProviderEnabled(String arg0) { } 
     @Override 
     public void onStatusChanged(String arg0, int arg1, Bundle arg2) { } 
    } 
} 
+0

comment créer une instance de 'SmsReceiver'? Aussi, veuillez formater votre message – Asahi

Répondre

0

vous pouvez passer contexte comme argument de enableGPS et l'utiliser pour appeler getSystemService

+0

Oui bien sûr, en passant en 'contexte' de la méthode onReceive travaillée. Merci de votre aide – bobby123

Questions connexes