7

次の意図があります。

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/*");
startActivityForResult(intent, DBOpenHelper.REQUEST_CODE_RESTORE);

このインテントにより、ユーザーは多数のオプションからテキスト ファイルを選択できます。たとえば、ローカル ストレージと Dropbox で問題なく動作し、どちらの場合も次のようにファイルを取得できます。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if ((requestCode == DBOpenHelper.REQUEST_CODE_RESTORE)
            && (resultCode == Activity.RESULT_OK)) {
        restoreFile = new File(data.getData().getPath());
        restoreFileName = restoreFile.getName();
    }
}

ローカル ストレージは正常に機能し、Dropbox はファイルのローカル コピーを SD カードにコピーし、正しいパスを返します。問題は、ユーザーが Google ドライブからファイルを選択する場合です。Google ドライブを使用すると、data.getData().getPath() は、ローカルに保存されたファイルへのパスを返す代わりに、"/document/acc=1;doc=195" のようなものを返します。Google ドライブにファイルをダウンロードさせ、パスを返すにはどうすればよいですか? ユーザーが利用可能なファイル ストレージ オプションから選択できるようにしたいと考えています。

4

1 に答える 1

7

ユーザーがファイルを選択したときに、Google ドライブがファイルをローカルにダウンロードした場合とダウンロードしなかった場合があります。ただし、すべての場合において、getContentResolver().openInputStream(data.getData())openInputStream()を介してファイルのコンテンツにアクセスできます。これはローカル ファイルもサポートしており、他の場合にも使用でき、使用する必要があることに注意してください。

于 2015-01-04T22:26:49.980 に答える