在Android设备上使用用户数据标头(UDH)检索SMS

时间:2011-04-15 15:24:31

标签: android sms

我正在开发一个应该使用用户数据标头(UDH)检索SMS的Android应用程序。带有UDH的邮件对于标准的Android SMS Messenger来说是不可见的。我使用“06050415810000”UDH进行测试(“06” - 标题长度,“05” - 标题类型,“04” - 标题其余部分的长度,“1581” - 目标端口,“0000” - src端口)。使用Samsung OS的设备已检索到带有此类标题的邮件,并且邮件显示在收件箱文件夹中(但无法打开邮件)。使用Android操作系统的设备没有显示它(这是正常的),但我的应用程序无法捕获隐形短信。 我有以下代码来捕捉短信:

public class SmsReceiver extends BroadcastReceiver {

public Class<?> delegate = null;

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


    Bundle bundle = intent.getExtras();
    if (bundle != null) {
        Object[] pdus = (Object[])bundle.get("pdus");
        final SmsMessage[] messages = new SmsMessage[pdus.length];
        for (int i = 0; i < pdus.length; i++) {
            messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
        }

        AppManager.setSmsMessage(messages[0]);

        if (delegate != null) {
            Intent di = new Intent(context, delegate);
            di.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            di.putExtra("SMS", messages[0].getPdu());
            context.startActivity(di);
        }

    }
}

这是我的清单文件:

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

应用程序仅检索没有UDH的邮件。

1 个答案:

答案 0 :(得分:-2)

您需要RECEIVE_SMS权限

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