Androidに、Dropboxなどのクラウドストレージを使用してファイル共有を行うアプリがあります。共有を開始するには、Android.intent.action.SEND
をスローします。表示されるリストにGoogleドライブアプリが表示されます(以前にインストールされた)、それで私はそれにファイルを送ってみます-それはうまくいきます、ファイルはドライブリストに表示されます。
次に、別のデバイスでこのファイルを読みたいと思います。 Android.intent.action.GET_CONTENT
インテントをスローし、[ドライブ]を選択すると、ファイルへのアクセス方法がわかりません。私は次のようなURIを受け取ります:
content://com.google.Android.apps.docs.files/exposed_content/6jn9cnzdJbDywpza%2BlW3aA%3D%3D%0A%3BRV%2FaV94o%2FCcW4HGBYArtwOdHqt%2BrsYO4WmHcs6QWSVwp%2FXogkRAgit7prTnfp00a%0A
物理ファイルパスに変換する方法がわかりません。これからファイルの内容を取得するにはどうすればよいですか?
私はコンテンツプロバイダーをいじってみましたが、ファイル名は取得できますが、フルパスなどは取得できません。
ドロップボックスの場合、ストレートでシンプルなfile://
スタイルのuriがうまく機能します。
ContentResolverで使用できるコンテンツプロバイダーのURIを送信しています。例:
getContentResolver().query(Uri contentUri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
編集:実際のパス名を取得するには、以下のソリューションを使用してください
私も同じ問題に直面していました。フォローコードを使用して、Googleドライブファイルからファイルパスを取得しました。 SkyDriveとDropBoxで動作します。
String filePath = null;
Uri _uri = data.getData();
Log.d("", "URI = " + _uri);
if(_uri != null && "content".equals(_uri.getScheme())) {
Cursor cursor = this.getContentResolver().query(_uri, new String[] { Android.provider.MediaStore.Files.FileColumns.DATA }, null, null, null);
cursor.moveToFirst();
filePath = cursor.getString(0);
cursor.close();
} else {
filePath = _uri.getPath();
}
Log.d("", "Chosen path = " + filePath);
インテントを使用してファイルを選択しています。これがファイルを選択するための私のコードです。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
String strType = "*/*";
intent.setDataAndType(Uri.parse(dir.getAbsolutePath()), strType);
startActivityForResult(intent, PICKFILE_RESULT_CODE);
私のコードは正常に機能し、内部メモリまたは外部メモリからファイルを取得します。同じコードでGoogleドライブからファイルを取得したい。