1

/Removable/MicroSD/のように、Uriからフルパスを取得するにはどうすればよいですか

以下のコードを使用して、ユーザーが Lollipop で SD カードを選択し、SD カードへの書き込みアクセスを取得できるようにします。

startActivityForResult(new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), 42);

以下のコードで結果を処理するメソッド onActivityResult を作成しました

if (resultCode == RESULT_OK)
{
    Uri treeUri = resultData.getData();
    DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
    WriteDebugData(pickedDir.getName());
}

ただし、ディレクトリをMicroSDとして返します。必要なのは、フルパス名/Removable/MicroSD/です

PS: また、Uri を参照するすべてのリンクが必要です。Ex /Removable/MicroSD//Storage/MicroSD/の両方のパスが外部 MicroSD カードを参照しています。どうすればそれらをすべて取得できますか?

4

1 に答える 1

3

/Removable/MicroSD/のように、Uriからフルパスを取得するにはどうすればよいですか

あなたはそうしない。

まず、 がUri実際に物理ストレージを指している必要はまったくありません。たとえば、クラウド サービスACTION_OPEN_DOCUMENT_TREE(Google ドライブ、Dropbox など)を介してアクセスするUriと、内部的に、使用可能なドキュメントのリストのローカル キャッシュを含むデータベースへのルックアップ キーとして使用される が返されることがあります。

第 2 に、 がUri物理ストレージを指している場合でも、アクセス可能な物理ストレージ上の場所である必要はありません。特に、ストレージ アクセス フレームワーク (例: ) を備えたデバイスでは、リムーバブル ストレージACTION_OPEN_DOCUMENT_TREEに任意にアクセスすることはできません。または、クラウド サービスの場合、物理ストレージはアプリ専用の内部ストレージである場合があります。

第 3 に、Uriがアクセス可能な物理ストレージを指している場合でも、実際にその位置データをUriそれ自体に焼き付ける必要はありません。Uri可能性がありますcontent://some.authority.string/asdfklasj2348dfljaslkdfj。実際、 を作成するすべての開発者ContentProvider、特に Storage Access Framework をサポートする開発者には、Uri値ができるだけ不透明になるようにすることをお勧めします。

IOW は、Web サーバーへの URL がローカル ファイルへの参照である以上、ローカル ファイルへの参照ではありませんUri

于 2015-08-16T13:32:44.653 に答える