web-dev-qa-db-ja.com

GoogleドライブのGET_CONTENTインテント読み取りファイル

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がうまく機能します。

17
khusrav

ContentResolverで使用できるコンテンツプロバイダーのURIを送信しています。例:

getContentResolver().query(Uri contentUri, String[] projection, String selection, String[] selectionArgs, String sortOrder);

編集:実際のパス名を取得するには、以下のソリューションを使用してください

Android:コンテンツURIからファイルURIを取得しますか?

5

私も同じ問題に直面していました。フォローコードを使用して、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ドライブからファイルを取得したい。

2
Jahangeer Ahmed