7

電話からの発信SMSメッセージの数をカウントするアプリケーションを作成しようとしています。現在、私は次のコードを持っています:

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,
                     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");
        }
    }
}

1ページのSMSメッセージを送信すると、 onChange3回呼び出されます。2ページのSMSメッセージを送信すると、 onChange4回呼び出されます。5回呼び出される3ページのメッセージ。等々。

注:Uri.parse("content://sms")「content:// sms / send」などの他のバリエーションを試しましたが、「content://sms」以外はonChange呼び出されませんでした。

送信SMSメッセージを一意に区別し、送信されたSMSメッセージの数を正確にカウントするにはどうすればよいですか?

4

3 に答える 3

4

SMS メッセージを送信すると、メッセージのステータスが保存されることに注意してください。それを解決するには、そのレコードのタイプを onchange int type = c.getInt(c.getColumnIndex("type")); () で 3 回 チェックし
ます 。 このケースは受取人1名のみに適用されます。 受信者が 1 人より多い場合は、「thread_id」と「seen」を再クエリしてタイプを取得する必要があります。成功したメッセージの送信数を確認できます。 幸運を!





于 2012-05-06T10:19:36.460 に答える
2

問題の解決策を見つけました。SMS と MMS は、_id 値によって一意に区別できます。

Uri uriSMSURI = Uri.parse("content://sms");
    Cursor cur = getContentResolver().query(uriSMSURI, null, null,
                 null, null);
    cur.moveToNext();
String id = cur.getString(cur.getColumnIndex("_id"));
于 2011-08-15T17:04:14.207 に答える
0

送信 SMS メッセージを一意に識別し、送信された SMS メッセージの正確な数を取得するにはどうすればよいですか?

できません。

このコンテンツ プロバイダーは、Android SDK の一部ではありません。その使用は文書化されておらず、サポートもされていません。さらに、特定のメッセージング クライアント (たとえば、AOSP Messenger アプリ) がそれをどのように使用するかは、それ自体が文書化されておらず、サポートされていません。SMS を 1 回送信すると、コンテンツ プロバイダーに 1,337 回の変更が加えられる可能性があり、それを知る方法はありません。さらに、送信 SMS メッセージがこのコンテンツ プロバイダーまたは任意のコンテンツ プロバイダーに記録される必要さえありません。また、最近の行動が何らかの兆候である場合、Google は将来、このコンテンツ プロバイダーへのサードパーティ アクセスを停止する可能性があります。

于 2011-08-10T16:01:59.663 に答える