web-dev-qa-db-ja.com

Cordova FileTransferを使用してファイルをパブリックディレクトリに保存する

モバイルデバイスにファイルをダウンロードし、他のアプリからアクセスできるようにする必要があります(AndroidおよびiOSを使用)。

SDカード(cordova.file.externalDataDirectory)にファイルをダウンロードできましたが、これはAndroidにしか存在せず、それでも信頼できませんSDカードを持っているすべてのデバイスで。

デバイスストレージ(cordova.file.dataDirectory)にダウンロードすると、ファイルは自分のアプリに対して非公開になり、他のアプリからアクセスできなくなります。ファイルはInAppBrowserで開くことができますが、それぞれのデフォルトアプリを使用したいと思います。

すべてのデバイスで公開されているディレクトリへのパスを取得する方法はありますか?

https://stackoverflow.com/a/21375812/3432305 で提案されているソリューションによって返されるパスは、Androidでは両方ともプライベートです...

編集:

私が達成しようとしていることがより明確になるように、使用例を説明する必要があると思います。のアプリチャットから、それぞれのデフォルトアプリ(pdfビューア、画像)を使用してファイルを開きますビューアなど)。 Cordova File Opener plugin はローカルファイルシステムからのファイルのみを受け入れるため、最初に保存する必要があります。しかし、それらは必ずしも私のアプリの外部からアクセスできる必要はありません...

13
kolli

Androidでは、外部ストレージディレクトリは常に存在します。デバイスに物理SDカードがない場合は、Androidがそれをエミュレートします。参照 getExternalStorageDirectory

注:ここで「外部」という言葉を混同しないでください。このディレクトリは、メディア/共有ストレージと考えるとよいでしょう。これは、比較的大量のデータを保持できるファイルシステムであり、すべてのアプリケーションで共有されます(権限を適用しません)。これは伝統的にSDカードですが、保護された内部ストレージとは別のデバイスの組み込みストレージとして実装することもでき、コンピューター上のファイルシステムとしてマウントできます。

したがって、cordova.file.externalDataDirectoryは常に解決されます。ただし、アプリ間でデータを共有するには、おそらくcordova.file.externalRootDirectory-外部ストレージ(SDカード)のルート。 cordova-plugin-file を参照してください。

これにより、別のアプリからアクセスしやすい場所にファイルを保存できます。 /sdcard/my_shared_data/

IOSでは、Appleの アプリ間通信ガイド が言うように、セキュリティポリシーのためにアプリが意図的に互いに分離されているため、ファイルを共有するのはより困難です。

アプリはデバイス上の他のアプリと間接的にのみ通信します

IOSで最善の策は、iCloud経由でデータを同期することでデータを共有することです。 iCloud設計ガイドのセクション 複数のアプリに共通のユビキティコンテナーを構成する を参照してください。

...おそらく、相互運用して互いにファイルにアクセスする必要がある2つのアプリを提供しているとします。これらの例の両方で、共通のユビキタスコンテナーを指定し、各アプリからコンテナーへのアクセスを要求することにより、必要なアクセスを取得します。

17
DaveAlden