In BroadcastReceiver-Klasse neue Activity aufrufen

  • Antworten:2
  • Bentwortet
Yves B.
  • Forum-Beiträge: 21

03.06.2011, 16:13:56 via Website

Hallo zusammen,

ich habe eine Klasse sms_receiver welche von BroadcastReceiver erbt. Diese Klasse wird in meiner App aufgerufen, sobald eine SMS eingeht. In dieser Klasse zerlege ich die SMS in ihre Bestandteile und schreibe Absender und den SMS-Text in Variablen. Diese möchte ich anschliessend an einen Intent anheften und eine andere Klasse im übergeordneten Package aufrufen. Diese Klasse sollte anschliessend GPS-Koordinaten auf einer MapView anzeigen. Die Koordinaten stehen in der SMS-Nachricht.

Das Problem ist, dass mir Eclipse anzeigt, dass der Konstruktor des Intents nicht für den Typ sms_receiver gemacht ist. Hat jemand von euch eine Idee wo das Problem ist? Habe schon unzählige Intents geschrieben und verstehe nicht in wie fern sich dieser hier unterscheidet..

[code]
public class sms_receiver extends BroadcastReceiver {

final static String LOG_TAG = "Deja-vu";

private String sms;
private String absender;
private SmsMessage[] messages;

@Override
// Wenn eine SMS eingeht während die App läuft
public void onReceive(Context context, Intent intent) {

Bundle bundle = intent.getExtras();
if (bundle != null)
{
// Schreibe SMS in PDU-Array
Object[] pdus = (Object[]) bundle.get("pdus");
messages = new SmsMessage[pdus.length];

// Schleife über alle Array-Elemente
for (int i = 0; i < messages.length; i++)
{
// Erstelle Nachricht anhand der PDU-Formatierung
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
// Hole Absender aus Nachrichten-Array
absender = messages[i].getOriginatingAddress();
// Hole Text aus Nachrichten-Array
sms = messages[i].getMessageBody();

// Log-Ausgabe
Log.d(LOG_TAG, "SMS-Absender: " + absender);
Log.d(LOG_TAG, "SMS-Nachricht:" + sms);
}
}

// MapActivity zum speichern aufrufen und Daten übergeben
Intent i = new Intent(this, map.class);
i.putExtra("absender", absender);
i.putExtra("text", sms);
startActivity(i);

}

}
[/code]


Vielen Dank
Yves

Antworten
Yves B.
  • Forum-Beiträge: 21

05.06.2011, 21:53:00 via Website

Problem löste ich folgendermassen:

Da ich den Kontext der BroadcastReceiver-Klasse nicht verwenden konnte, füllte ich einen public Context beim Start in der Menu-Activity mit dem Kontext des Menüs. In der BroadcastReceiver-Activity verwende ich dann halt die Context-Variable. Ist vielleicht nicht die eleganteste Lösung, jedoch funktioniert sie für mich und das reicht mir vollkommen aus.

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

06.06.2011, 01:37:58 via App

Hm,
in der onReceive gibt er dir doch einen Kontext? Ich meine ich hab den immer benutzt mit context.startActivity(..);
Lg Ansgar
edit: Wobei ich glaub ich hab nur nen Service gestartet..

— geändert am 06.06.2011, 01:39:28

Antworten