我想将我的应用程序与联系人管理器集成:
更确切地说:
当我在手机中运行联系人应用程序然后单击任何头像时,会显示一个弹出(快速联系人徽章)窗口,其中包含一些可供选择的应用程序(联系人、邮件等)我想在那个地方添加我的应用程序。
那有可能吗?
我希望清楚。
提前致谢。
我想将我的应用程序与联系人管理器集成:
更确切地说:
当我在手机中运行联系人应用程序然后单击任何头像时,会显示一个弹出(快速联系人徽章)窗口,其中包含一些可供选择的应用程序(联系人、邮件等)我想在那个地方添加我的应用程序。
那有可能吗?
我希望清楚。
提前致谢。
嘿伙计,我终于解决了这个问题,向 ContactProvider 添加了一个自定义字段,然后 QuickContactBadge 将为您链接它。
我的代码,用于添加、删除特定条目,删除我添加的所有条目。
private static final String IM_LABEL = "Test protocol";
private static final String LOG_TAG = "Log"
/**
* This method add my account under IM field at default Contact
* application
*
* Labeled with my custom protocol.
*
* @param contentResolver
* content resolver
* @param uid
* User id from android
* @param account
* account name
*/
public static void updateIMContactField(ContentResolver contentResolver,
String uid, String account) {
ContentValues contentValues = new ContentValues();
contentValues.put(ContactsContract.Data.RAW_CONTACT_ID,
Integer.parseInt(uid));
contentValues.put(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);
contentValues.put(ContactsContract.CommonDataKinds.Im.TYPE,
ContactsContract.CommonDataKinds.Im.TYPE_CUSTOM);
contentValues.put(ContactsContract.CommonDataKinds.Im.LABEL, IM_LABEL);
contentValues.put(ContactsContract.CommonDataKinds.Im.PROTOCOL,
ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM);
contentValues.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL,
IM_LABEL);
contentValues.put(ContactsContract.CommonDataKinds.Im.DATA, account);
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValues(contentValues).build());
try {
contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
Log.d(LOG_TAG, "Can't update Contact's IM field.");
}
}
/**
* This method remove IM entry at default Contact application.
*
* @param contentResolver
* content resolver
* @param uid
* User id from android
* @param account
* account name
*/
public static void removeIMContactField(ContentResolver contentResolver,
String uid, String account) {
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation
.newDelete(Data.CONTENT_URI)
.withSelection(
ContactsContract.Data.RAW_CONTACT_ID + "=? and "
+ ContactsContract.Data.MIMETYPE + "=? and "
+ ContactsContract.CommonDataKinds.Im.DATA
+ " = ?",
new String[] {
String.valueOf(uid),
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE,
account }).build());
try {
contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
Log.d(LOG_TAG, "Can't delete Contact's IM field.");
}
}
/**
* This method remove IM all entries at default Contact application
*
* @param contentResolver
* content resolver
*/
public static void deleteAllIMContactField(ContentResolver contentResolver) {
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation
.newDelete(Data.CONTENT_URI)
.withSelection(
ContactsContract.Data.MIMETYPE
+ "= ? and "
+ ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL
+ "= ?",
new String[] {
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE,
IM_LABEL }).build());
try {
contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
Log.d(LOG_TAG,
"An exception occurred when deleting all IM field of Contact.");
}
}
希望有人发现这很有用。
下面介绍如何在 ContactsContract.IM 中添加自定义字段。
val contentProviderOperation = ArrayList<ContentProviderOperation>()
val rawContactInsertIndex = contentProviderOperation.size
contentProviderOperation.add(
ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build()
)
val customOperation = ContentProviderOperation
.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID,
rawContactInsertIndex
).withValue(
ContactsContract.Contacts.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE
).withValue(
ContactsContract.Contacts.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE
).withValue(
ContactsContract.CommonDataKinds.Im.TYPE,
ContactsContract.CommonDataKinds.Im.TYPE_CUSTOM
).withValue(
ContactsContract.CommonDataKinds.Im.PROTOCOL,
ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM
).withValue(
ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL,
"Custom IM Field"
).withValue(
ContactsContract.CommonDataKinds.Im.DATA,
"Custom IM Value"
)
contentProviderOperation.add(customOperation.build())
contentResolver.applyBatch(ContactsContract.AUTHORITY, contentProviderOperation)