17

Dropbox などのクラウド ストレージを使用してファイル共有を行う Android のアプリがあります。共有を開始するには、 をスローし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 がうまく機能します。

4

2 に答える 2

5

ContentResolver で使用できるコンテンツ プロバイダーの URI が送信されます。たとえば、次のようになります。

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

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

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

于 2013-07-27T11:48:09.107 に答える
2

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

于 2013-12-09T13:11:00.233 に答える