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) { }
}
}
comment créer une instance de 'SmsReceiver'? Aussi, veuillez formater votre message – Asahi