2

この質問はかなり古く、重複している可能性があることは知っていますが、それに基づいた特定のクエリがあり、まだ解決策を見つけようとしています。

私の知る限り、ContentObserveron URIcontent://smsはデータが変更されるたびにトリガーされます。私が試してみました、

https://katharnavas.wordpress.com/2012/01/18/listening-for-outgoing-sms-or-send-sms-in-android/

Android : ContentObserver または受信機を使用して発信 SMS をキャッチできない

などなど...

私の理解では、これはコンテンツ プロバイダーによってのみ達成でき、これを処理するブロードキャストはありません。またcontent://sms/sent、動作しません

contentResolver.registerContentObserver(Uri.parse("content://sms/sent"), true, observer);

onChangeSMS が送信、受信、削除されたかどうかにかかわらず、各メッセージング データを受信して​​います。したがって、Androidおよびその他のstackoverflowリンクのドキュメントに従って、https://developer.android.com/reference/android/provider/Telephony.TextBasedSmsColumns.html#MESSAGE_TYPE_SENTを比較方法として使用して見つけました。

だから私のチェックは次のようになります、

@Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        Uri uriSMSURI = Uri.parse("content://sms");
        Cursor cur = getContentResolver().query(uriSMSURI, null, null, null, null);
        cur.moveToFirst();
        String id = cur.getString(cur.getColumnIndex("_id"));
        String protocol = cur.getString(cur.getColumnIndex("protocol"));
        Log.d(TAG, "protocol = " + protocol);
        int type = cur.getInt(cur.getColumnIndex("type"));
        Log.d(TAG, "onChange: type = " + type);
        // I have even tried with protocol == null check.
        if (type == 2 && smsChecker(id)) {
            Log.d(TAG, "Sent sms");
        }
        cur.close();
    }

    private boolean smsChecker(String smsId) {
        boolean flagSMS = true;

        if (smsId.equals(lastSmsId)) {
            flagSMS = false;
        }
        else {
            lastSmsId = smsId;
        }

        return flagSMS;
    }

ここでの私の質問は、メッセージを削除したり、発信メッセージをトリガーしたりすると、HTC 電話でタイプ 2 を受信します-L OS (着信メッセージでも type==2 が表示されることがあります)。

特に SMS SENT の変更を探しているので、この onChange リクエストをどのように分離できますか。

4

0 に答える 0