在现有的联系人配置文件安卓中添加应用程序链接



我正在开发一个应用程序,我需要在手机现有的联系人配置文件中添加我的应用程序链接,就像免费或whatspp一样,而无需创建新的。

我尝试使用以下代码执行此操作

public static void addContactTag(Context context, String number) {

    ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
    // Create our RawContact
    ContentProviderOperation.Builder builder = ContentProviderOperation
            .newInsert(RawContacts.CONTENT_URI);
    builder.withValue(RawContacts.ACCOUNT_NAME, AccountGeneral.ACCOUNT_NAME);
    builder.withValue(RawContacts.ACCOUNT_TYPE, AccountGeneral.ACCOUNT_TYPE);
    operationList.add(builder.build());
    // Create a Data record of common type 'Phone' for our RawContact
    builder = ContentProviderOperation
            .newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(Data.RAW_CONTACT_ID, 0);
    builder.withValue(ContactsContract.Data.MIMETYPE,
            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
    builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number);
    operationList.add(builder.build());
    // Create a Data record of custom type
    // "vnd.android.cursor.item/vnd.be.ourservice.profile" to display a link
    // to our profile
    builder = ContentProviderOperation
            .newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(Data.RAW_CONTACT_ID, 0);
    builder.withValue(ContactsContract.Data.MIMETYPE, MIMETYPE);
    builder.withValue(ContactsContract.Data.DATA1, number);
    builder.withValue(ContactsContract.Data.DATA3, "My app");
    operationList.add(builder.build());
    try {
        context.getContentResolver().applyBatch(ContactsContract.AUTHORITY,
                operationList);
        Log.i("addContact batch applied");
    } catch (Exception e) {
        Log.i("Something went wrong during creation! " + e);
        e.printStackTrace();
    }
}

一切似乎都很好,但它没有更新现有的联系人,而是创建了一个新的联系人。

任何帮助将不胜感激。

提前谢谢。

您在此处提到的代码旨在编写新 contact.to 编辑当前联系人,您应该执行以下操作。

       try {
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
   .withSelection(ContactsContract.CommonDataKinds.Phone._ID + "=? AND " +
           Data.MIMETYPE + "='" +
           ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'",
           new String[]{contact_id})
    .withValue(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, "anything")
    .build());
    ContentProviderResult[] result = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
    Log.w("UpdateContact", e.getMessage()+"");
    for(StackTraceElement ste : e.getStackTrace()) {
        Log.w("UpdateContact", "t" + ste.toString());
    }
    Context ctx = getApplicationContext();
    int duration = Toast.LENGTH_SHORT;
    Toast toast = Toast.makeText(ctx, "Update failed", duration);
    toast.show();
}

如果您还没有弄清楚这一点,请尝试一下。我发现更新联系人在正确选择参数方面非常棘手。

如果有帮助,请接受并标记它。快乐的编码:)

相关内容

  • 没有找到相关文章

最新更新