Android 以编程方式插入的联系人未链接到我的应用

Posted

技术标签:

【中文标题】Android 以编程方式插入的联系人未链接到我的应用【英文标题】:Android programmatically inserted contact isn't linked to my app 【发布时间】:2015-06-28 12:47:00 【问题描述】:

我使用以下代码为我的应用创建了一个自定义帐户:

    Account account = new Account(username, accountType);
    ContentResolver.setIsSyncable(account, context.getString(R.string.CONTACT_AUTHORITY), 1);
    ContentResolver.setSyncAutomatically(account, context.getString(R.string.CONTACT_AUTHORITY), true);
    if(accManager.addAccountExplicitly(account, password, userData)) 
        Intent intent = new Intent();
        intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, account.name);
        intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, account.type);
        intent.putExtra(AccountManager.KEY_AUTHTOKEN, account.type);
        context.setAccountAuthenticatorResult(intent.getExtras());
        context.setResult(Activity.RESULT_OK);
        return account;
     else 
        // display error
    

然后我尝试使用以下方法插入新联系人:

// insert new contact
ContentValues values = new ContentValues();
values.put(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType);
values.put(ContactsContract.RawContacts.ACCOUNT_NAME, accountName);
Uri rawContactUri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
Log.d("ABC", "New raw contact id = " + rawContactId);

// insert new rawContact id
values.clear();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "zzzzzawesome");
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);

我能够插入新联系人,但问题是当我在联系人列表中查看该联系人时,“已连接通过”部分中没有我的应用程序图标,而是显示电话图标,知道为什么吗?

我正在使用三星 S5 进行测试。

【问题讨论】:

【参考方案1】:

我终于解决了,问题在于缺少 SyncAdapter 服务实现。在 androidManifest.xml 中添加以下内容后,问题解决了。

    <service
        android:name=".authenticator.ContactsSyncAdapterService"
        android:exported="true">
        <intent-filter>
            <action android:name="android.content.SyncAdapter" />
        </intent-filter>
        <meta-data
            android:name="android.content.SyncAdapter"
            android:resource="@xml/sync_contacts" />
    </service>

【讨论】:

以上是关于Android 以编程方式插入的联系人未链接到我的应用的主要内容,如果未能解决你的问题,请参考以下文章

我试图以编程方式将 WebView 插入到我的代码中

android以编程方式编辑联系人

如何删除以编程方式添加新联系人时添加的 Android 联系人应用程序中的重复条目?

如何使用谷歌联系人api以编程方式将手机联系人同步到android中的gmail

如何在以编程方式将 newInsert 插入地址簿后获取最后插入的 RawContacts ID?

Android:以编程方式从剪贴板中删除单个项目