标签: rawcontactid

如何仅更新联系人而不是添加同步适配器

我的应用数据库中存储的数字很少.我想在联系人应用中匹配这些数字并更新与mimetype的联系.基本上是Whatsapp的作用.他们同步所有联系人,他们的应用程序图标联系.

我已完成同步部分,如果我添加新的联系人,那么我可以在联系人中显示我的应用程序图标.但我的要求是只更新现有联系人.

这是我试图更新联系人,

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
            .withValueBackReference(Data.RAW_CONTACT_ID,id)
            .withValue(Data.MIMETYPE, MIMETYPE)
            .withValue(Data.DATA1, "Username")
            .withValue(Data.DATA2, "Ite's Me")
            .build());

        try {
            context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

而且rawContactid我从中获取

Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI, new String[] {Data.RAW_CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.CONTACT_ID }, 
             ContactsContract.CommonDataKinds.Phone.NUMBER + "= ?", 
                     new String[] {phonenumb}, null);
Run Code Online (Sandbox Code Playgroud)

我无法在该联系人中添加连接.我究竟做错了什么.有人可以帮我这个.

提前致谢.

android contactscontract android-syncadapter android-contacts rawcontactid

5
推荐指数
1
解决办法
677
查看次数

使用Contact id获取RawContact id

我已经构建了以下方法,以使用从Contacts表中获取的id从RawContacts表中获取id.此方法无法进行异常处理.

     public int getRawContactId(int contactId)
{
    String[] projection=new String[]{ContactsContract.RawContacts._ID};
    String selection=ContactsContract.RawContacts.CONTACT_ID+"=?";
    String[] selectionArgs=new String[]{String.valueOf(contactId)};
    Cursor c=context.getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI,projection,selection,selectionArgs , null);
    int rawContactId=c.getInt(c.getColumnIndex(ContactsContract.RawContacts._ID));
    Log.d(TAG,"Contact Id: "+contactId+" Raw Contact Id: "+rawContactId);
    return rawContactId;
}
Run Code Online (Sandbox Code Playgroud)

相应的Logcat如下所示:

           FATAL EXCEPTION: main
           java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, 
           request=1, result=-1, data=Intent {  
           dat=content://com.android.contacts/contacts/lookup/3844i21/993 flg=0x1 }} to    
           activity {com.example.contactbadger/com.example.contactbadger.MainActivity}: 
           android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a  
           size of 1
           at android.app.ActivityThread.deliverResults(ActivityThread.java:3367)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3410)
           at android.app.ActivityThread.access$1100(ActivityThread.java:141)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)
           at android.os.Handler.dispatchMessage(Handler.java:99)
           at android.os.Looper.loop(Looper.java:137)
           at android.app.ActivityThread.main(ActivityThread.java:5103)
           at java.lang.reflect.Method.invokeNative(Native Method)
           at java.lang.reflect.Method.invoke(Method.java:525)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
           at …
Run Code Online (Sandbox Code Playgroud)

android contactscontract rawcontactid

3
推荐指数
1
解决办法
4703
查看次数

无法识别WhatsApp联系人

我正在尝试编写一个Android程序,可以识别给定的联系号码是否与WhatsApp相关联.我设法找出一个特定的联系人姓名是否有WhatsApp帐户.如何找出与该联系人姓名相对应的联系人是否有WhatsApp?目前我正在使用以下代码:

public void identifyWhatsappContact() {
    Cursor c = ctx.getContentResolver().query(
            RawContacts.CONTENT_URI,
            new String[] { RawContacts.CONTACT_ID, RawContacts.DISPLAY_NAME_PRIMARY },
            RawContacts.ACCOUNT_TYPE + "= ? AND " + StructuredName.DISPLAY_NAME_PRIMARY + " = ?",
            new String[] { "com.whatsapp", "John Doe" },
            null);

    ArrayList<String> myWhatsappContacts = new ArrayList<String>();
    int contactNameColumn = c.getColumnIndex(RawContacts.DISPLAY_NAME_PRIMARY);
    while (c.moveToNext())
    {
        myWhatsappContacts.add(c.getString(contactNameColumn));
        Log.v("WHATSAPP", c.getString(contactNameColumn)+"");
    }
}
Run Code Online (Sandbox Code Playgroud)

我能够确定"John Doe"是否有WhatsApp,但我无法弄清楚"John Doe"的哪个电话号码有WhatsApp(假设联系人有多个电话号码).有人可以帮帮我吗?我已经在这里尝试过这个解决方案,但它对我不起作用.

android android-contacts android-cursor rawcontactid whatsapp

3
推荐指数
1
解决办法
1433
查看次数