往系统中插入一条短信息,然后在通知栏中通知,点击通知栏后可以在系统短信列表中出现,就这样制造了一条垃圾短信了。
虽然不知道是不是所有的机器都适合,但至少有成功的。
首选,往数据库中插入一条短信:
String message="message content";
String fromAddress="130000";
Uri uri=insertSms(fromAddress, message);
Uri insertSms(String fromAddress, String message) {
ContentValues values=new ContentValues();
values.put("address", fromAddress);
values.put("body", message);
//values.put("date", "20130121"); //不放时间就表示是当前的时间,
values.put("read", 0);
values.put("type", 1);
//values.put("service_center", "+86161776500");
Uri uri=getContentResolver().insert(mSmsUri, values);
Log.d("", "uri:"+uri);
return uri;
}
接着制造通知:
Notification.Builder notification=new Notification.Builder(SmsSendIntentTestActivity.this)
.setTicker(message)
.setWhen(System.currentTimeMillis())
.setContentTitle(fromAddress)
.setContentText(message)
.setAutoCancel(true)
.setSmallIcon(R.drawable.angel)
.setContentIntent(createDisplayMessageIntent(SmsSendIntentTestActivity.this, fromAddress, message,
notificationId, uri));
具体的通知创建:
private PendingIntent createDisplayMessageIntent(Context context, String fromAddress,
String message, int notificationId, Uri uri) {
Intent smsIntent=new Intent(Intent.ACTION_MAIN);//这里调用的是Main intent,如果是view就会到另一个显示界面中,暂时也不知道如何调用,把threadid查询到放进去,总是不成功,所以只到短信列表中。
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.setType("vnd.android-dir/mms-sms");
PendingIntent pendingIntent=PendingIntent.getActivity(context, 0, smsIntent, 0);
return pendingIntent;
}
这样,一条垃圾短信就制造成功了,与系统短信不同的是,比如4.2.1系统通知栏会有回复,已读等按钮,这里就没有了。
还要自定义一个通知,把系统短信的图标拿来用就好了。
如果系统版较低,通知要修改下:
Intent smsIntent=new Intent(Intent.ACTION_MAIN);
smsIntent.addCategory(Intent.CATEGORY_DEFAULT);
smsIntent.setType("vnd.android-dir/mms-sms");
PendingIntent mPendingIntent=PendingIntent.getActivity(SmsSendIntentTestActivity.this, 0, smsIntent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
mNotification.setLatestEventInfo(SmsSendIntentTestActivity.this, fromAddress, message, mPendingIntent);
//发送通知
notificationManager.notify(notificationId, mNotification);