0

などに登録ContentObserverするサービスを開始しますSMS inbox

smsObserver = new SmsObserver(new Handler());
getContentResolver().registerContentObserver(Uri.parse("content://sms/inbox"), true, smsObserver);

これがクラスです。プロバイダーにいつ変更が加えられたか知りたいだけですが、onChangeメソッドへのコールバックを取得できません

private class SmsObserver extends ContentObserver{

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

    @Override
    public void onChange(boolean selfChange){
        super.onChange(selfChange);
        Cursor c = getContentResolver().query(Uri.parse("content://sms/inbox"),
                new String[] {"thread_id"},"address" + "=" + from,null,null);
        if(c != null && c.moveToLast()){
            long id = c.getLong(0);
            Log.d("ID", c.getString(0));
        }
        c.close();
    }
}

また、Uri のオブザーバーを登録するcontent://mms-sms/conversationsと、それが機能し、これから SmsObserver クラスにすべてを行った方法をコピーしたので、何が問題なのかわかりません。にオブザーバーを設定できませんcontent://sms/inboxか?

4

3 に答える 3

1

ContentObserver-まず、次のように登録します。

getContentResolver().registerContentObserver(Uri.parse("content://mms-sms/inbox"), true, smsObserver);

-次に、あなたの次のメソッドをオーバーライドしますContentObserver:

@Override    
public void onChange(boolean selfChange, Uri uri){}
于 2013-03-12T16:20:22.987 に答える
0

ブロードキャスト レシーバー: を使用してみてください。ブロードキャストを登録する必要があります。参照: SMS ブロードキャスト レシーバーの問題

于 2013-01-21T01:57:09.507 に答える
0

ブロードキャストレシーバーを使用している場合、ブロードキャストが終了すると、sms が db に入れられます。これは、bg スレッドを起動して少しの間スリープさせる必要があることを意味し、その後、sms が db に表示されます

于 2013-01-23T03:35:32.620 に答える