android - 在现有联系人个人资料 android 中添加应用程序链接

标签 android android-contacts contactscontract applinks

我正在开发一个应用程序,我需要在其中添加我的应用程序链接,就像手机现有联系人资料中的 freecharge 或 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();
    }
}

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

我们将不胜感激。

提前致谢。

最佳答案

您在此处提到的代码旨在编写新联系人。要编辑当前联系人,您应该这样做。

       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();
}

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

如果有帮助,请采纳并标记。 快乐编码:)

关于android - 在现有联系人个人资料 android 中添加应用程序链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38367927/

相关文章:

android - 如何在任何 Android 手机中查找和收集给定联系人中的所有可用信息?

android - 网络应用 : Hide a div except android browsers

android - 来自 Android Studio 中 ProcessRecord 的权限拒绝 : opening provider com. android.providers.contacts.ContactsProvider2

android - 想要以编程方式在联系人中创建一个新组

android - 显示名称未更新 Email.Content_URI

Android 和 Facebook 联系人选择器 Issuer

android - 尝试对服务器执行 POST 时获取 java.util.NoSuchElementException。服务器的响应是 204/success,但仍然会引发异常

android - 如何在 Android 中使用 MigLayout

Android:动画完成后更新 LinearLayout 位置

android - 使用 Contact id 获取 RawContact id