我正在尝试制作一个简单的应用程序来拦截从电话运营商的电子邮件服务收到的所有短信。
工作原理:我有一封来自话务员的电子邮件,每次收件箱收到一封带有短信的电子邮件时,都会通知我。短信是这样来的:
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
我试图制作的这个应用程序必须拦截这些短信,检索整个主题("主题转到这里"),并从一个内容上只有主题的号码发送虚假短信。
我已经做了:从这个电子邮件服务中拦截所有这些短信,检索主题,并从一个新号码(我选择了3)中伪造一条新的短信。
但现在我遇到了一个问题:这个新的伪造短信没有显示任何通知。
BroadcastReceiver:
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();
是否有重新通知上次收到的短信?有什么建议吗?
编辑收到的短信后,您必须对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);
}
}
}