我正在编写服务以将联系人与我的网络服务同步。
我通过帐户设置添加我的帐户。然后我将它与我的网络服务同步。一切都好。在我添加自定义帐户之前,我的设备上没有任何帐户。并且设备上的联系人存储应用程序的“数据”值为 0.00B。
同步后,我的所有联系人都会出现在联系人应用程序中。联系人存储应用程序没有“数据”值为 4.53Mb。
然后我从我的设备中删除我的帐户。联系人存储应用程序现在将“数据”值显示为 3.74Mb。
之后,我重新添加我的帐户并再次开始同步。同步完成后,Contact Storage 应用程序显示“数据”值广告 7.90Mb。
如果我重复前面的步骤,请联系存储应用程序“数据”值继续增长。
那为什么呢?好像我从我的网络服务下载的头像不干净。
当我删除我的帐户时如何删除它们?
我添加这样的头像:
public ContactOperations addAvatar(String avatarUrl) {
contentValues.clear();
if (!TextUtils.isEmpty(avatarUrl)) {
try {
byte[] avatar = NetworkUtils.downloadAvatar(avatarUrl);
byte[] resizedAvatar = resizeBitmap(avatar);
avatar = null;
contentValues.put(Photo.PHOTO, resizedAvatar);
contentValues.put(Photo.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
addInsertOperation();
} catch (IOException e) {
Log.e(ContactOperations.class.toString(), e.getMessage(), e);
}
}
return this;
}
private void addInsertOperation() {
ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(StructuredName.RAW_CONTACT_ID, 0);
builder.withValue(ContactsContract.Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
builder.withValues(contentValues);
batchOperation.add(builder.build());
}
之后我在 BatchOperation 类上调用方法
public List<Uri> execute() {
List<Uri> resultUris = new ArrayList<Uri>();
if (mOperations.size() == 0) {
return resultUris;
}
// Apply the mOperations to the content provider
try {
ContentProviderResult[] results = mResolver.applyBatch(ContactsContract.AUTHORITY,
mOperations);
if ((results != null) && (results.length > 0)){
for (int i = 0; i < results.length; i++){
resultUris.add(results[i].uri);
}
}
} catch (final OperationApplicationException e1) {
Log.e(TAG, "storing contact data failed", e1);
} catch (final RemoteException e2) {
Log.e(TAG, "storing contact data failed", e2);
}
mOperations.clear();
return resultUris;
}