Obsługa przychodzących wiadomości SMS | android4devs


Lipiec 17, 2011
Snippety Telefoniczne

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

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

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

Zrzut z Logów urządzenia:

,

 

[…] 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). […]

Zaloguj się lub skorzystaj z profilu:

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

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

Obsługa przychodzących wiadomości SMS

Dodatkowe wymagania

Efekt działania

Komentarze (1)

Prześlij komentarz

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());
		}
	}
}
<receiver android:name=".MySmsReceiver">
	<intent-filter>
		<action android:name="android.provider.Telephony.SMS_RECEIVED" />
	</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_SMS" />


1
komentarz

Przewijanie do góry