私と同じ制限を求める投稿は見つかりませんでした。コンテンツプロバイダへのアクセスを制限する
私は、コンテンツプロバイダ(メインアプリケーションと呼ぶ)を他のアプリケーション(クライアントアプリケーションと呼ぶ)に提供するアプリケーションを持っています。クライアントアプリケーションからのコンテンツプロバイダへのアクセスを制限するには、のと、のクエリのメソッドのみをサポートします。
私はしたくないもの:主な目的は、クライアントアプリケーションにデータベースを提供することであるため
- は、コンテンツプロバイダは、プライベートください。
- クライアントアプリケーションの署名付きアクセスを制限するには、メインアプリケーションプラットフォームを使用するクライアントアプリケーションを作成できる必要があります。
私が見る最も明白な解決策は、2つのコンテンツプロバイダ、1つはメインアプリケーションのプライベートアクセスと1つの制限付き公開の両方を書くことです。しかし、これは間違いなく適切な方法だと私は思う。
このGoogle groups postによれば、コンテンツプロバイダの呼び出しでBinder.getCallingUid()
を使用して、呼び出しがメインアプリケーションから来たものかどうかを検出することを考えています。だから私はの更新とのメソッドを呼び出しても、メインアプリケーションからの呼び出しでない場合は何もできません。
メインアプリケーションを取得する方法UIDを比較するには?可能であれば、このソリューションは安全ですか?
ご協力いただきありがとうございます。
私が正しく理解すれば、コンテンツプロバイダコンポーネントを含むアプリケーションは、書き込みアクセス権を持つ唯一のものでなければなりません。その理由から、コンテンツプロバイダのインターフェイスを経由せずにその機能を使用できないのはなぜですか?その場合、コンテンツプロバイダはクエリインタフェースのみをサポートします。 – Sameer
残念ながら、クライアントアプリケーションが必要とする主なアクセスは挿入です。彼らはまた、書き込みアクセスを持つ必要があります。しかし、主なアプリケーションはコンテンツプロバイダを使用する必要はありませんが、複雑さと保守性があまりにも高くなります。 – FabiF
よく、まだ同じポイント。メインアプリケーションは、コンテンツプロバイダインタフェースを介さずに、挿入、更新、削除を直接行うことができます。コンテンツプロバイダは、挿入およびクエリインタフェースのみを提供します。 – Sameer