我正在做一个监听短信,获取短信内容的应用,我注册了一个Broadcastreceive来监听接收短信,但是应用在有的手机上可以运行,在有的机子上不能运行,不知道怎么回事?我怀疑是有的手机把系统的短信应用重写了,广播的优先级比较高,所以我的应用接收不到了。各位大神有没有什么好的解决方法?android短信

解决方案 »

  1.   

    你所谓的不能运行是指什么?一运行就死掉还是不能监听到短信?一般来说不会重写应用,看看手机有没有被root过,如果root过,会有些权限的影响。
      

  2.   

    Android手机上监听短信有两种方式 1、 接受系统的短信广播,操作短信内容。 <action android:name="android.provider.Telephony.SMS_RECEIVED" /2、 应用观察者模式,监听短信数据库,操作短信内容。
      

  3.   

    监听短信数据库的操作   下面是我写的监听读短信
    public class MySmsObserver extends ContentObserver { Context context;
    Cursor cur;

    public MySmsObserver(Handler handler) {
    super(handler);
    // TODO Auto-generated constructor stub  
    } public MySmsObserver(Context ctx, Handler handler) {
    // TODO Auto-generated constructor stub
    super(handler);
    context = ctx;
    } @Override
    public void onChange(boolean selfChange) {
    // TODO Auto-generated method stub
    super.onChange(selfChange);
    queryNotReadSms();
    int count = cur.getCount();         if(count == 0)
            {
             ///
            }
            cur.close();
    } private void queryNotReadSms()
    {
    Uri myUri = Uri.parse("content://sms/inbox");
    ContentResolver resolver = context.getContentResolver();
            String[] projection =new String[]{"_id","address","thread_id","read"};        String selection = "read=? and address=?";
            String[] args = new String[]{"0","10086"};        
            cur = resolver.query(myUri, projection, selection , args, "date desc");
    }
    }
      

  4.   

    很可能是硬件厂商修改了android源码,例如小米手机改的就比较多,但一般很少去改短信监控相关接口的实现。
    那有一种可能就是某些手机安装了360类似的安全软件,他们的短信监控优先级比较高,而且有些预处理,以至于你的程序无法监控。
      

  5.   

    同意六楼的,监听短信直接用广播接收器来做,显然是不成熟的想法,众多的短信拦截功能的App早在你之前就已经使用了该功能,时时的去监控系统短信数据库的数据变化,对你来说是最准确,最及时的做法了
      

  6.   

    哥们,这个你测试过了吗?我测试的不行,好像手机必须要root才能操作数据库。