7

読み取り専用のContentProviderを最適に実装する方法を考えています。ContentProviderの追加の特別なメソッド(もちろん、ContentResolverからはアクセスできません)を使用して、自分のアプリケーション内からのみデータソースを変更したいと思います。つまり、他のアプリケーションは、ContentProviderのクエリメソッドのみを使用でき、挿入、削除、または更新はできないはずです。

明らかな解決策は、null / 0/0を返すだけで、挿入/削除/更新で他に何もしないことのようです。これらの操作が許可されていないことを明確に伝えるために、代わりにこれらのメソッドで常に例外をスローする方がよいでしょうか?または、権限を介してのみContentProviderへのアクセスをクエリメソッドに制限する可能性さえありますか?

4

2 に答える 2

4

2年後、私は自分自身にまったく同じ質問をしています。私は許可が答えであることを理解しています。

それでも、「挿入/削除/更新」メソッド内に何かを記述する必要があります(うまくいけば呼び出し可能ではありません)。

例外を使用することに同意します。これは、呼び出されることを想定していないため、呼び出される場合は警告する必要があるためです。

しかし、ここで見つかった行は次のように述べています。

これらのメソッドを実装する必要がありますが、コードは期待されるデータ型を返す以外に何もする必要はありません。たとえば、他のアプリケーションが一部のテーブルにデータを挿入しないようにしたい場合があります。これを行うには、insert()の呼び出しを無視して、0を返すことができます。

つまり、null/0/0を返すのが良い方法です。私はこのように使うつもりです。

于 2013-11-11T18:03:48.977 に答える
3

これを実現する1つの方法は、ContentProvider段落のこのリンクからアクセスできるセキュリティ権限を使用することです。具体的には、AndroidManifestxmlファイルでプロバイダーにwritePermissionを設定します。

ただし、セキュリティ権限を使用したくない場合は、2番目の段落で説明したアプローチを使用できます。これらの特定の挿入/更新/削除機能にアクセスできないことが明確になるように、例外をスローすることをお勧めします。

于 2012-01-31T19:51:53.320 に答える