Android:检测短信传出,错误计数

我正在尝试创建一个应用程序来计算来自手机的外发短信的数量.目前我有以下代码
private void listenForSMS(){
    Log.v("SMSTEST","STARTED LISTENING FOR SMS OUTGOING");
    Handler handle = new Handler(){};

    SMSObserver myObserver = new SMSObserver(handle);

    ContentResolver contentResolver = getContentResolver();
    contentResolver.registerContentObserver(Uri.parse("content://sms"),true,myObserver);
}

private class SMSObserver extends ContentObserver{

    int count = 0;
    String lastMessage = null;

    public SMSObserver(Handler handler) {
        super(handler);
    }

    public void onChange(boolean selfChange) {
        super.onChange(selfChange);

        Log.v("SMSTEST","HIT ON CHANGE");

        Uri uriSMSURI = Uri.parse("content://sms");
        Cursor cur = getContentResolver().query(uriSMSURI,null,null);
        cur.movetoNext();
        String protocol = cur.getString(cur.getColumnIndex("protocol"));
        if(protocol == null){
            count++;
            Log.v("SMSTEST","SMS SENT: count: " + count);
            String content = cur.getString(cur.getColumnIndex("body"));

        }else{
            Log.v("SMSTEST","SMS RECIEVED");
        }
    }
}

当我发送一页短信时,onChange被调用3次.当我发送两页短信时,onChange被调用4次. 3页留言,被叫5次;等等.

注意:我已经尝试过Uri.parse的其他变体(“content:// sms”),例如“content:// sms / sent”,除了“content:// sms”之外没有任何变化可以调用.

如何唯一地区分外发短信并准确计算发送的短信数量

解决方法

请注意,当您发送SMS消息时,它将保存消息的状态.要解决它,请检查记录的类型int type = c.getInt(c.getColumnIndex(“type”)); 3次onchange(): 1st:type = 6 第二名:type = 4 第3名:type = 2(成功) 然后你可以增加你的柜台. 此案例仅适用于1个收件人. 如果有更多1个收件人,需要重新查询“thread_id”和“seen”以获取该类型.您可以查看已成功发送的邮件数量. 祝好运!

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...