3

私は十分にグーグルで検索しましたが、このケースを見つけることができませんでした。特定のアプリのみが共有/アクセスできるカスタム コンテンツ プロバイダーを作成したいと考えています。

私はこのシナリオを持っています:

  • Google Play に複数のアプリがあります。A、B、C と言ってください。
  • A、B、C のみがアクセスできるコンテンツ プロバイダー、たとえば Z を作成したいと考えています。コンテンツ プロバイダー「Z」を独自の apk として公開することを考えています。
  • Z がデバイスにインストールされている場合。A、B、C は Z にアクセスできます。Z がインストールされていない場合、最初のアプリは Google Play に移動して Z をインストールします。

今私の質問は:

特定のアプリ間でのみ共有されるコンテンツプロバイダーを作成することはまったく可能ですか? android:exported="false" を指定すると、他の外部アプリからアクセスできなくなります。android:exported が false に設定されている場合、android:grantUriPermissions="true" は機能しません。android:exported を true に設定すると、パブリックにアクセスできるようになります。

複数のアプリ間で情報を共有するという私の要件により適していると思われる場合は、他のソリューションも自由に共有してください。

4

1 に答える 1

1

android:exported が false に設定されている場合、android:grantUriPermissions="true" が機能しない

はい、そうです。

ただし、android:grantUriPermissions特に Z が独自のスタンドアロン アプリである場合は、ユース ケースに関連しない可能性があります。IntentZ はフラグ付きのan を使用して A/B/C を呼び出す必要があり、FLAG_GRANT*これはあなたの計画に合わないと思います。

私が推測するように、A/B/C が Z とは別に Z にアクセスする必要がある場合、Z にアクセスできることを伝え、特定のUriアクセス許可を付与する場合、標準的なアプローチはカスタムのsignature-levelを使用すること<permission>です。次に、プロバイダーのエクスポートを防御android:permissionし、<provider>. 理論的には、アプリ スイートのみがその署名キーによって署名され、署名が一致するため、アプリ スイートのみがその権限を保持できるというものです。

(このアプローチには問題があるため、「理論上」と言います)

于 2014-06-27T17:11:08.397 に答える