7

私はアンドロイドカメラアプリ用に開発しており、いくつかのシナリオで uris を使用しました。たとえば、カメラから結果データを結果のために開始したアプリに戻す場合や、ユーザーが共有ボタンをクリックしたときに IntentChooser が開かれた場合などです。

今のところ、ほとんどの場合、File Uris を使用しました。これは、より安全なソリューションと思われるためです。ContentResolver と MediaStore を操作すると、常に問題が発生する可能性があります。さらに、コンテンツ URI をサポートしていなくても、ファイル URI をサポートしているアプリがかなり前にあったことを覚えています。

しかし、ユーザーが Android 6.0 で「ハングアウト」ファイルへのアクセス許可を与えないことを決定したため、File Uris で配信すると「ハングアウト」アプリがファイルにアクセスできないというメールが Google から届きました。

私の質問は次のとおりです。コンテンツを他のアプリに配信するときは、通常、ファイル URI からコンテンツ URI に切り替える必要がありますか? それが進むべき道であり、すべてのアプリがContent Urisに依存/サポートする必要がありますか?

4

2 に答える 2

5

はい、コンテンツの URL が最適です。

カメラ アプリの場合、ファイルの URL が非常に適切であったかどうかはわかりません。呼び出し元のアプリにファイルを渡した後、いつファイルを削除できるかをどのように知ることができますか? コンテンツ URL を使用すると、呼び出し元のアプリはその URL を介してデータを要求し、データを配信したら、リソースのコピーを解放できます。(アプリがコンテンツ URL を介してアクセスされるデータへの「永続的な」アクセスを必要とする場合、そのデータ自体を保存するのはアプリ次第です)。

于 2015-10-08T11:06:23.543 に答える
3

アプリケーション間でファイルを交換するには、コンテンツ URI を使用する必要があります。Android 7.0 以降では、アプリケーションの外部でファイル URI を渡すと FileUriExposedException が発生します。Android 7.0 以降の動作変更の抜粋を次に示します。

Android 7.0 を対象とするアプリの場合、Android フレームワークは StrictMode API ポリシーを適用し、アプリの外部に file:// URI を公開することを禁止します。ファイル URI を含むインテントがアプリを離れると、アプリは FileUriExposedException 例外で失敗します。

アプリケーション間でファイルを共有するには、content:// URI を送信し、URI に一時的なアクセス許可を付与する必要があります。

于 2017-09-15T13:35:44.317 に答える