我发现解决方案是让应用程序ContentProvider
实施OnAccountsUpdateListener
。附上ContentProvider
作为一名听众在其onCreate
法account_manager.addOnAccountsUpdatedListener(this, null, false)
然后执行类似
@Override
public void onAccountsUpdated(final Account[] accounts) {
Ln.i("Accounts updated.");
final Iterable<String> account_list = new Iterable<String>() {
@Override
public Iterator<String> iterator() {
return new Iterator<String>() {
private final Iterator<Account> account_list = Arrays.asList(accounts).iterator();
@Override
public boolean hasNext() {
return account_list.hasNext();
}
/** Extracts the next account name and wraps it in single quotes. */
@Override
public String next() {
return "'" + account_list.next().name + "'";
}
@Override
public void remove() { throw new UnsupportedOperationException("Not implemented"); }
};
}
};
final String account_set = TextUtils.join(", ", account_list);
Ln.i("Current accounts: %s", account_set);
// Removes content that is associated with accounts that are not currently connected
final SelectionBuilder builder = new SelectionBuilder();
builder.table(Tables.CALENDARS)
.where(Calendars.CALENDAR_USER + " NOT IN (?)", account_set);
new SafeAsyncTask() {
@Override
public Void call() throws Exception {
_model.openWritableDatabase();
_model.delete(builder);
return null;
}
}.execute();
getContext().getContentResolver().notifyChange(Calendars.NO_SYNC_URI, null, false);
}
我构建了当前连接账户的String
,然后建立与String
一个SQL查询的接口方式。我在该查询的后台线程上对数据库执行删除操作,以删除与当前未连接的帐户关联的数据。我通知内容已更改,但不需要与服务器同步。
你能详细解释一下你的答案吗?你在谈论什么'onCreate'? – akirk
... ContentProvider,阅读更接近的第一行。我不知道你想要什么“精心制作”d –
是否可以在ContentProviders生命周期中的相关位置删除OnAccountsUpdateListener? – fr1550n