1 komentarz

Obsługa przychodzących wiadomości SMS

Lipiec 17, 2011 Snippety Telefoniczne

Przykład klasy BroadcastReceiver obsługującej przychodzące wiadomości tekstowe.

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

public class MySmsReceiver extends BroadcastReceiver {
	@Override
	public void onReceive(Context context, Intent intent) {
		Bundle extrasBundle = intent.getExtras();
		SmsMessage[] messages = null;
		if (extrasBundle != null) {
			messages = getMessagesFromBundle(extrasBundle);
			handleMessages(messages);
		}
	}

	private SmsMessage[] getMessagesFromBundle(Bundle bundle) {
		Object[] pdus = (Object[]) bundle.get("pdus");
		SmsMessage[] messages = new SmsMessage[pdus.length];
		for (int i = 0; i < messages.length; i++) {
			messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
		}
		return messages;
	}

	private void handleMessages(SmsMessage[] messages) {
		for (int i = 0; i < messages.length; i++) {
			Log.d("MySmsReceiver", "Message no. " + (i + 1) + ":");
			Log.d("MySmsReceiver", "SMS sender: " + messages[i].getOriginatingAddress());
			Log.d("MySmsReceiver", "SMS body: " + messages[i].getMessageBody());
			Log.d("MySmsReceiver", "SMS Service Center: " + messages[i].getServiceCenterAddress());
		}
	}
}

Dodatkowe wymagania

W pliku AndroidManifest.xml należy dodać nasz BroadcastReceiver wraz z właściwym filtrem intencji, który go wywoła:

<receiver android:name=".MySmsReceiver">
	<intent-filter>
		<action android:name="android.provider.Telephony.SMS_RECEIVED" />
	</intent-filter>
</receiver>

Należy również dodać pozwolenie na odbieranie wiadomości tekstowych dla naszej aplikacji:

<uses-permission android:name="android.permission.RECEIVE_SMS" />

Efekt działania

Zrzut z Logów urządzenia:

Komentarze (1) Subskrybuj

 

  1. [...] Oddzielna klasa – tworzona przy bardziej rozbudowanych Odbiorach komunikatów. Zwykle obsługuje wiele różnych intencji, sama uruchamia odpowiednie komponenty systemowe, działa niezależnie od innych komponentów. Rejestrowana jest za pomocą pliku AndroidManifest.xml, dzięki czemu zdefiniowana jest jeszcze przed uruchomieniem całej aplikacji. Przykładem takiego samodzielnego BroadcastReceivera może być nasz snippet obsługujący przychodzące wiadomości SMS (link). [...]

Prześlij komentarz

Zaloguj się lub skorzystaj z profilu:

[rpxlogin redirect="http://www.android4devs.pl" prompt="" style="large"]

Możesz również zostawić komentarz bez rejestracji, korzystając z poniższego formularza:

Musisz być zalogowany aby móc pisać komentarze.