4

https://developer.android.com/training/secure-file-sharing/setup-sharing.htmlAndroid 7 nougat、着信意図からのファイルパスを取得する方法は?

私は知っているアンドロイドノーガットのファイルポリシーを変更します。 他のアプリへのファイル共有が望むアプリは、FileProviderによってuriを生成します。 uri形式はcontent://com.example.myapp.fileprovider/myimages/default_image.jpgです。

私は、どのようにFileProvider.getUriForFile()によって生成するuriからファイルパスを取得できますか知りたいです。 私のアプリは

  • [要するに] が

    ことが可能であるなど、

      を節約するために、物理的なファイルパスを知っておく必要があり、負荷、readinfo私のアプリは他のアプリで意図URIを受けているので、 andorid 7 nougatで。
    1. uri形式はcontent://com.example.myapp.fileprovider/myimages/default_image.jpg
    2. FileProvider.getUriForFileで生成された可能性があります。
    3. uriからファイルパスを取得する方法を知りたい。
    4. 私はちょうどgetContentResolver().openFileDescriptor()からMIMEタイプ、表示名、ファイルサイズ、および読み込みビンを得ることができます。 しかし、私はファイルパスを知っているwnat。
  • +1

    ストリームからバイナリを読み取ることができる場合は、ストリームから読み取ることができます。これを使って。ファイルパスは必要ありません。ファイルプロバイダだけがあなたにファイルパスを伝えることができるはずですが、それはありません。再考する。再設計。ファイルパスは必要ありません。 – greenapps

    +1

    "私のアプリは物理的なファイルパスを知っておく必要があります。次に、 'ContentResolver'と' openInputStream() 'を使って、あなた自身のコピーを作ります。あなたはパスを決定できないだけでなく、たとえ可能であっても、とにかくそのファイルへのファイルシステムへのアクセス権がない可能性が非常に高いです。 – CommonsWare

    答えて

    4

    Uriがファイルを指し示す必要はないという単純な理由から、「ファイルパス」を得ることはできません。 ContentResolverとopenInputStream()のようなメソッドを使用して、Uriが表すコンテンツにアクセスします。

    コンテンツURIを使用して別のアプリケーションとファイルを共有するには、アプリケーションに コンテンツURIを生成する必要があります。コンテンツURIを生成するには、ファイルに新しい ファイルを作成し、ファイルをgetUriForFile()に渡します。 getUriForFile()によって返されたコンテンツURIを インテントの別のアプリに送信することができます。コンテンツURIを受け取るクライアントアプリケーションは、 ファイルを開き、ContentResolver.openFileDescriptor を呼び出してそのコンテンツにアクセスし、ParcelFileDescriptorを取得することができます。 ソース:Android developers

    +1

    'コンテンツURIを使用して別のアプリケーションとファイルを共有するには、アプリがFileProviderを実装する必要があります。 – greenapps

    関連する問題