如何在Content Provider中更新,插入,删除而不生成通知?

时间:2012-05-30 21:03:10

标签: android android-contentprovider

我在SQLite数据库之上编写了一个自定义内容提供程序。内容提供商扩展SQLiteContentProvider。内容提供程序在许多插入,删除或更新操作结束时发送通知。现在我希望在数据库上进行一些更新,插入和删除操作,但不希望生成任何通知。怎么做到这一点?

来自SQLiteContentProvider#bulkInsert

的代码示例
@Override
    public int bulkInsert(Uri uri, ContentValues[] values) {
        int numValues = values.length;
        mDb = mOpenHelper.getWritableDatabase();
        mDb.beginTransactionWithListener(this);
        try {
            for (int i = 0; i < numValues; i++) {
                Uri result = insertInTransaction(uri, values[i]);
                if (result != null) {
                    mNotifyChange = true;
                }
                mDb.yieldIfContendedSafely();
            }
            mDb.setTransactionSuccessful();
        } finally {
            mDb.endTransaction();
        }

        onEndTransaction();
        return numValues;
    }

1 个答案:

答案 0 :(得分:2)

我建议在调用不需要

通知的更新/插入/删除时使用不同的URI

因此您将拥有YourMetadata.CONTENT_URIYourMetadata.CONTENT_URI_DONT_NOTIFY

然后你可以正常执行插入/更新/删除..就在你通知检查之前,看看你的uri是否是你不应该通知的

如果您有URI匹配器,则可以使用匹配结果中的代码来确定您在

上执行批量插入的URI。

如果没有,你可以使用

boolean notifyChanges = YourMetadata.CONTENT_URI.equals(uri); //will be true if we want to notify on the URI

然后在插入后使用notifyChanges的值来确定是否要通知。