Android SMS-приемник / обработчик - PullRequest
1 голос
/ 30 января 2012

Я просто хочу спросить, если кто-нибудь знает или у него есть работающий код приемника / обработчика SMS для Android.Поскольку я искал в сети уже несколько дней и до сих пор не видел обновленного кода, большинство из них, похоже, устарели на них, например, здесь http://mobiforge.com/developing/story/sms-messaging-android Я был бы очень признателен, если бы кто-то мог научить меняновые коды для получения смс в приложении.спасибо!

Ответы [ 3 ]

4 голосов
/ 28 марта 2012

Я только недавно внедрил работающий BroadcastReceiver для обработки SMS-сообщений.Ключевыми частями являются манифест и BroadcastReceiver.

В манифесте вам необходимо разрешение RECEIVE_SMS:

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

Вам не нужен READ_SMS.Запись вашего приемника должна выглядеть примерно так:

<receiver
    android:name=".IncomingSmsBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

Бит, который большинство людей, кажется, забывают, это android:exported="true", который необходим, потому что широковещательная передача происходит из-за пределов вашего приложения.Некоторые публикации предполагают, что вам нужно android:permission="android.permission.RECEIVE_SMS" или android:permission="android.permission.BROADCAST_SMS", но это не так.

Моя реализация BroadcastReceiver выглядит так:

package smsmanager;

import java.util.List;

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

public class IncomingSmsBroadcastReceiver extends BroadcastReceiver {

    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

    @Override
    public void onReceive(final Context context, final Intent intent) {

        if (intent != null && SMS_RECEIVED.equals(intent.getAction())) {
            final SmsMessage smsMessage = extractSmsMessage(intent);
            processMessage(context, smsMessage);
        }

    }

    private SmsMessage extractSmsMessage(final Intent intent) {

        final Bundle pudsBundle = intent.getExtras();
        final Object[] pdus = (Object[]) pudsBundle.get("pdus");
        final SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[0]);

        return smsMessage;

    }

    private void processMessage(final Context context, final SmsMessage smsMessage) {
        // Do something interesting here
    }

}

И все работает так, как я хочуи я могу прекратить прожигать свои SMS-надписи, проверяя ths

0 голосов
/ 30 января 2012

Здесь есть нить , которая содержит код для выполнения того, что вы просите.Обратите внимание, что в ответах есть некоторые исправления.

0 голосов
/ 30 января 2012

Это Должно работать и не считается устаревшим, если вы замените android.telephony.gsm.SmsMessage на android.telephony.SmsMessage. это просто о прослушивании android.provider.Telephony.SMS_RECEIVE.

...