Android:仅获取更新和删除的联系人 [英] Android: Get updated and deleted contact only

查看:102
本文介绍了Android:仅获取更新和删除的联系人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个应用程序,在该应用程序中我正在使用Android Contacts,但无法继续前进.在应用程序中,需要应用程序的是更新的联系人应发送到服务器或删除的联系人应发送到服务器进行同步.

I am developing an application in which i am working on Android Contacts and not able to move ahead. In app the need of application is that the contact which is updated should send to server or the contact which is deleted should send to server for sync.

我将联系服务用作:

public class ContactService extends Service {
    private int mContactCount;
    Cursor cursor = null;
    static ContentResolver mContentResolver = null;

    // Content provider authority
    public static final String AUTHORITY = "com.android.contacts";
    // Account typek
    public static final String ACCOUNT_TYPE = "com.example.myapp.account";
    // Account
    public static final String ACCOUNT = "myApp";

    // Instance fields
    Account mAccount;
    Bundle settingsBundle;

    @Override
    public void onCreate() {
        super.onCreate();
        // Get contact count at start of service
        mContactCount = getContactCount();      
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // Get contact count at start of service
        this.getContentResolver().registerContentObserver(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, true, mObserver);
        return Service.START_STICKY;
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    private int getContactCount() {
        try {
            cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
            if (cursor != null) {
                return cursor.getCount();
            } else {
                cursor.close();
                return 0;
            }
        } catch (Exception ignore) {
        } finally {
            cursor.close();
        }
        return 0;
    }

    private ContentObserver mObserver = new ContentObserver(new Handler()) {
        @Override
        public void onChange(boolean selfChange) {
             this.onChange(selfChange, null);
        }

        @Override
        public void onChange(boolean selfChange, Uri uri) {
            new changeInContact().execute();
        }
    };

    public class changeInContact extends AsyncTask<String, Void, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... arg0) {
            ArrayList<Integer> arrayListContactID = new ArrayList<Integer>();

            int currentCount = getContactCount();

            if (currentCount > mContactCount) {
                // Contact Added
            } else if (currentCount < mContactCount) {
                // Delete Contact               
            } else if (currentCount == mContactCount) {             
                // Update Contact
            }
            mContactCount = currentCount;
            return "";
        }

        @Override
        protected void onPostExecute(String result) {
            contactService = false;
        } // End of post
    }
}

我面临的问题如下:

A:在上面的代码中,为了获取最近更新的联系人,我需要检查设备中每个联系人的版本 和我的数据库存储版本的联系人.大量联系人花费了很多时间.

A: In the above code for getting the recently updated contact i need to check the Version of each contact from device with my database stored version of contacts. Which took much time for large amount of contacts.

B..要删除联系人,我需要检查设备中是否存在用于存储在我的数据库中的原始ID 数据不是.如果不是,则该联系人被删除.检查整个联系人也需要太多时间.

B. For getting deleted contact i need to check that the data for the Raw id stored in my database is present in device or not. If not then the contact is deleted. It also take too much time to check whole contacts.

但是联系人刷新是在Whats App中完成的,仅需几秒钟,如2到3秒钟...

But the same thing contact refresh is done in whats app in very few seconds like 2 to three seconds...

在以下模块中的上述代码中:

EDIT : In the above code in following module :

if (currentCount > mContactCount) {
    // Contact Added
    Log.d("In","Add");
} else if (currentCount < mContactCount) {
    // Delete Contact               
    Log.d("In","Delete");
} else if (currentCount == mContactCount) {             
    // Update Contact
    Log.d("In","Update");
}

我放了日志.因此,更新模块被调用了很多次,当我也添加或删除该时间时……

I put the log. So the update module is called many times, and also when i do add or delete that time too...

请指导我,并建议我减少上述任务的时间...

Please guide me and suggest me what to do to reduce the timing for the above tasks...

推荐答案

使用以下查询获取所有已删除和更新的联系人.

use the below query to get all the deleted and updated contacts.

public static final String ACCOUNT_TYPE = "com.android.account.youraccounttype"
public static final String WHERE_MODIFIED = "( "+RawContacts.DELETED + "=1 OR "+
            RawContacts.DIRTY + "=1 ) AND "+RawContacts.ACCOUNT_TYPE+" = '"+ ACCOUNT_TYPE+"'";

c = contentResolver.query(ContactsContract.RawContacts.CONTENT_URI,
                    null,
                    WHERE_MODIFIED,
                    null,
                    null);

这篇关于Android:仅获取更新和删除的联系人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆