`
bingtian
  • 浏览: 56579 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

如何截取指定号码的短信,并且不让系统截取到通知用户

阅读更多
之前在做黑名单屏蔽短信的时候,遇到一个比较棘手的问题,就是我截取我指定号码的短信之后,但是我如何不让系统通过通知栏通知用户,在网上也寻找了很久,也有点眉目了,以下是别人使用 ContentObserver 来监听短信数据库变化来实现的。


public class ScreenTest extends Activity {

  class SmsContent extends ContentObserver{

  private Cursor cursor = null;

  public SmsContent(Handler handler) {

  super(handler);

  }

  /**

  * @Description 当短信表发送改变时,调用该方法

  * 需要两种权限

  * android.permission.READ_SMS 读取短信

  * android.permission.WRITE_SMS 写短信

  * @Author Snake

  * @Date 2010-1-12

  */

  @Override

  public void onChange(boolean selfChange) {

  // TODO Auto-generated method stub

  super.onChange(selfChange);

  //读取收件箱中指定号码的短信

  cursor = managedQuery(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read"}, " address=? and read=?", new String[]{"12345678901", "0"}, "date desc");

  if (cursor != null){

  ContentValues values = new ContentValues();

  values.put("read", "1"); //修改短信为已读模式

  cursor.moveToFirst();

  while (cursor.isLast()){

  //更新当前未读短信状态为已读

  getContentResolver().update(Uri.parse("content://sms/inbox"), values, " _id=?", new String[]{""+cursor.getInt(0)});

  cursor.moveToNext();

  }

  }

  }

  }

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  SmsContent content = new SmsContent(new Handler());

  //注册短信变化监听

  this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), 


true, content);

  }

  }

  public class ScreenTest extends Activity {

  class SmsContent extends ContentObserver{

  private Cursor cursor = null;

  public SmsContent(Handler handler) {

  super(handler);

  }

  /**

  * @Description 当短信表发送改变时,调用该方法

  * 需要两种权限

  * android.permission.READ_SMS读取短信

  * android.permission.WRITE_SMS写短信

  * @Author Snake

  * @Date 2010-1-12

  */

  @Override

  public void onChange(boolean selfChange) {

  // TODO Auto-generated method stub

  super.onChange(selfChange);

  //读取收件箱中指定号码的短信

  cursor = managedQuery(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read"}, " address=? and read=?", new String[]{"12345678901", "0"}, "date desc");

  if (cursor != null){

  ContentValues values = new ContentValues();

  values.put("read", "1"); //修改短信为已读模式

  cursor.moveToFirst();

  while (cursor.isLast()){

  //更新当前未读短信状态为已读

  getContentResolver().update(Uri.parse("content://sms/inbox"), values, " _id=?", new String[]{""+cursor.getInt(0)});

  cursor.moveToNext();

  }

  }

  }

  }

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  SmsContent content = new SmsContent(new Handler());

  //注册短信变化监听

  this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);

  }

  }





但是我也试了几次,似乎不奏效,不知各位有何更好想法,大家分享分享!
1
3
分享到:
评论
2 楼 xcelicom 2010-06-10  
补充
cursor = managedQuery(Uri.parse("content://sms/inbox"),
 new String[]{"_id", "address", "read"}, " address=? and read=?", new String[]{"5556", "0"}, "date desc");
//5556是另一个模拟器的断口
if (cursor != null){
String strUriInbox = "content://sms/";//SMS_INBOX:1 
getContentResolver().delete(Uri.parse(strUriInbox)," address=? and read=?", new String[]{"5556", "0"});
}
1 楼 xcelicom 2010-06-10  
cursor = managedQuery(Uri.parse("content://sms/inbox"), new String[]{"_id", "address", "read"}, " address=? and read=?", new String[]{"5556", "0"}, "date desc");
if (cursor != null){
String strUriInbox = "content://sms/";//SMS_INBOX:1 
getContentResolver().delete(Uri.parse(strUriInbox)," address=? and read=?", new String[]{"5556", "0"});
}

模拟器2.2上测试.可以删除刚收到的短信,通知消息不会提醒,但是在进入系统自带短信界面有显示刚删除的那条消息的预览.点进去看,确实没有那条消息存在.推出自带的短信程序,再进去,就真正没有痕迹了.狂郁闷,高手能解答有没有删除后刷新数据或者刷新短信数据的方法,或者有其他的方式实现不通知系统的删除消息,
我还有一个想法,在 Receiver 获得intent"android.provider.Telephony.SMS_RECEIVED" 时候做点什么事情,我个人测试发现 Intent 先收到,可以截获消息,但我想系统也收到Intent,所以它更新的短信数据库,然后我们在ContentObserver中触发了onChange,“我们把他删除了”这样系统可能通知不到notification,但为什么在进系统的短信程序却看到提示刚删除消息的预览。不理解。

相关推荐

Global site tag (gtag.js) - Google Analytics