Android 如何检测添加到联系人数据库的新联系人

Android 如何检测添加到联系人数据库的新联系人,android,contacts,Android,Contacts,如何检测添加到联系人数据库的新联系人 我在互联网上找到了很多代码,但不起作用或包含错误 是否有一个想法,而不是一个代码来检测新的联系人添加 我知道我的问题很难回答,但只有一个想法或简单的答案:) 我测试了这段代码,但它返回了错误 ContentResolver cr = ctx.getContentResolver(); String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContrac

如何检测添加到联系人数据库的新联系人

我在互联网上找到了很多代码,但不起作用或包含错误

是否有一个想法,而不是一个代码来检测新的联系人添加

我知道我的问题很难回答,但只有一个想法或简单的答案:)

我测试了这段代码,但它返回了错误

ContentResolver cr = ctx.getContentResolver();

    String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME };

    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection, null, null,
            ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

    if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            Toast.makeText(this,cur.getString(cur.getColumnIndex(ContactsContract.Data._ID)), Toast.LENGTH_SHORT).show();
            Toast.makeText(this,cur.getString(cur.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)), Toast.LENGTH_SHORT).show();


        //  System.out.println(cur.getString(cur.getColumnIndex(ContactsContract.Data._ID)));
        //  System.out.println(cur.getString(cur.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)));      




        Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                new String[]{ c.getId() }, null);

        while (pCur.moveToNext()) {

            Toast.makeText(this, "Start!", Toast.LENGTH_SHORT).show();
            System.out.println(.add(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
        } 
        pCur.close();

            Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
                    null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                    new String[]{ c.getId() }, null); 

            while (emailCur.moveToNext()) { 
            System.out.println((emailCur.getString(
            emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)));
        }
        }
    }
    cur.close();

首先,您需要在主活动中注册此接收器--

getContentResolver(); 之后

public class MyCOntentObserver extends ContentObserver {

    public MyCOntentObserver() {
        super(null);
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        Log.d("onChange1", "~~~~~~" + selfChange);

        //getApplicationContext().startService(new Intent(MainActivity.this, SendContactService.class));
    }

    @Override
    public boolean deliverSelfNotifications() {
        Log.d("deliverSelfNotifications", "~~~~~~fg");
        return true;
    }
}

这只是一个想法,所以我不会将其作为答案发布,但我猜您可以使用Loader,因为它监视其数据,并在进行更改时自动更新,即创建新联系人。支持库提供了加载程序,因此您可以在许多Android版本上使用它。请我不理解它的权利,解释一个小Loader有任何android Loader的例子检查出我包括的链接。它包含你需要的一切。