次の意図があります。
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 ドライブにファイルをダウンロードさせ、パスを返すにはどうすればよいですか? ユーザーが利用可能なファイル ストレージ オプションから選択できるようにしたいと考えています。