2017-01-30 14 views
1

私は、連絡先をサーバーに同期させるアンドロイドプログラムを作成しようとしていました。私は同期部分を達成しました。最後のサーバープッシュが次のサーバーコールでプッシュされる可能性があるため、更新された連絡先などのdiff部分を維持したいと考えています。 私はContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMPを使用して連絡先の最終更新タイムスタンプを監視しています。連絡先が更新されたときに通知されるので正しく動作しますが、連絡先が変更されたようにCONTACT_LAST_UPDATED_TIMESTAMPも更新されるという問題があります。私はこれが起こることを望んでいない。私は上記の状況に近づくために、連絡先の正確な最終更新時刻または他の手段を求めます。提案は大歓迎です。ここに私のコードですAndroidの連絡先の時間をプログラムで取得する

String phoneNumber = null; 

     String _ID = ContactsContract.Contacts._ID; 
     String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME; 


     String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID; 
     String CONTACT_LAST_UPDATED_TIMESTAMP = ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP; 
     String Contact_last = ContactsContract.CommonDataKinds.Phone.CONTACT_LAST_UPDATED_TIMESTAMP; 
     String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER; 
     ContentResolver contentResolver = appContext.getContentResolver(); 
     Cursor cursor = contentResolver.query(CONTENT_URI, null, null, null, null); 

     ArrayList<Contact> contacts = new ArrayList<>(); 

     if (cursor!= null && cursor.moveToFirst() && cursor.getCount() > 0) { 
      do { 

       long activity_at = cursor.getLong(cursor.getColumnIndex(CONTACT_LAST_UPDATED_TIMESTAMP)); 
       if(activity_at <= prevActivityTime) { 

        continue; 
       } 
       // Create a contact object 
       Contact contact = new Contact(); 

       // Fetch contact id and contact name 
       String contact_id = cursor.getString(cursor.getColumnIndex(_ID)); 
       String contactName = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME)); 






      } while (cursor.moveToNext()); 
      cursor.close(); 
     } 

ここpreActivityAtは、今日は、サーバー

答えて

2

を呼び出すにプッシュ(またはからの電話を受ける)を受ける必要がありますまで、接触を昨日から更新前日すなわち連絡先のタイムスタンプを持つ変数であります値は、 ContactsContract.Contact.TIMES_CONTACTED, ContactsContract.Contact.LAST_TIME_CONTACTED となります。

実際にはContactがDBで更新されているため、LAST_UPDATEDタイムスタンプも更新されます。

この2つの値に気にしない場合は、この連絡先から最後に取得した連絡先の詳細と新しい連絡先との間で差異を確認してください。のいずれかが重要でない場合は、をスキップしてください接触。

UPDATE

アプリローカルDB内のすべての連絡先のすべての詳細を保存しないようにするに

、あなたは現在、連絡先に保存されたフィールドを表すハッシュ値(単一の長い整数)を、計算することができ、もし最近更新された連絡先の新しいハッシュ値が以前のハッシュ値と異なっており、連絡先が変更されていることがわかっている場合(気になる項目の場合)、その連絡先を同期する必要があります。私はすべての連絡先を格納し、私のアンドロイドで新しいデータベースを維持しなければならなかったと私はバックグラウンドサービスとしてコードを使用していますので、このためのJava: Getting a unique hash value of an object

+0

は、Javaオブジェクトに優れたハッシュ値を計算する方法でこれを参照してください。私のアプリケーションでは、それは非常に非効率的だと思う。 –

+0

保存する必要があるのはハッシュ値です。私は私の答えにそれを追加します – marmor

関連する問題