Android SMS接收器/处理程序

时间:2012-01-30 16:06:57

标签: android sms handler receiver

我只是想问一下是否有人知道或有一个工作的SMS接收器/处理程序代码为Android。因为我已经在网上搜索了好几天,而且我还没有看到更新的代码,大多数人似乎已经弃用了代码,就像这里的代码一样http://mobiforge.com/developing/story/sms-messaging-android如果有人可以教我,我会非常感激在应用程序中接收SMS的新代码。谢谢!

3 个答案:

答案 0 :(得分:4)

我刚刚实施了一个有效的BroadcastReceiver来处理短信。关键部分是清单和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
    }

}

一切都按照我的意愿行事,我可以停止加快我的短信津贴测试

答案 1 :(得分:0)

This如果您将android.telephony.gsm.SmsMessage替换为android.telephony.SmsMessage,则应该可以使用,并且不会弃用。它只是在倾听android.provider.Telephony.SMS_RECEIVE

答案 2 :(得分:0)

有一个帖子here,其中包含执行您要求的代码。请注意,答案中有一些更正。