0

我正在尝试制作一个简单的应用程序来拦截从我的电话运营商的电子邮件服务收到的所有 SMS。

它是如何工作的:我有一封来自电话接线员的电子邮件,每次收到一封带有 SMS 的电子邮件时都会通知我。短信是这样来的:


You have a new e-mail from:email@domain.com See it now through internet! Visit http://m.iclaro.com.br. Subject: SUBJECT GOES HERE

我试图制作的这个应用程序必须拦截这些短信,检索整个主题(“SUBJECT GOES HERE”)并从一个只有主题内容的号码发送虚假短信。

我已经完成的工作:截取来自该电子邮件服务的所有这些 SMS,检索主题并从一个新号码(我选择了 3)伪造一条新的 SMS,仅包含主题。

但现在我有一个问题:这条新的伪造短信没有显示任何通知。

广播接收器如下:


public class SmsReceiver extends BroadcastReceiver
    {
        ...
        public void onReceive( Context context, Intent intent ) 
        {
            ...
            if(address.contains("1") && body.contains(replace))
            {                   
                    body = body.substring(body.lastIndexOf(replace),body.length());
                    body = body.replace(replace, "");
                    address = "3";

                    ContentResolver contentResolver = context.getContentResolver();
                    ContentValues values = new ContentValues();
                    values.put("address", address);
                    values.put("body", body);
                    contentResolver.insert(Uri.parse("content://sms/inbox"), values);
                    this.abortBroadcast();
            }
        }
    }

我也尝试过:


if(address.contains("1") && body.contains(replace))
{
    this.abortBroadcast();

contentResolver.insert(Uri.parse("content://sms/inbox"), values);
this.abortBroadcast();

this.clearAbortBroadcast();
contentResolver.insert(Uri.parse("content://sms/inbox"), values);
this.abortBroadcast();

无论如何要重新通知最后收到的短信?有什么建议么?

4

1 回答 1

0

编辑收到的短信后,您必须对 pdu 进行编码。为此,您可以使用 smslib 等 java 库对 pdu 进行编码。

public class SmsReceiver extends BroadcastReceiver
    {
        ...
        public void onReceive( Context context, Intent intent ) 
        {
            ...
            if(address.contains("1") && body.contains(replace))
            {                   
                    body = body.substring(body.lastIndexOf(replace),body.length());
                    body = body.replace(replace, "");
                    address = "3";

                    //ContentResolver contentResolver = context.getContentResolver();
                    //ContentValues values = new ContentValues();
                    //values.put("address", address);
                    //values.put("body", body);
                    //contentResolver.insert(Uri.parse("content://sms/inbox"), values);
                    this.abortBroadcast();
                    //create new pdu from the edited data
                    byte[] pdu = .......;
                    intent.putSerializableExtra("pdus", pdu);
                    context.sendBroadcast(intent);
            }
        }
    }
于 2012-09-13T18:16:42.907 回答