【问题标题】:Add app link in existing contact profile android在现有的联系人资料android中添加应用程序链接
【发布时间】:2016-07-14 07:20:24
【问题描述】:

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

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

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: android android-contacts contactscontract applinks


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多