AndroidからGoogleドライブへのファイルコピー


AndroidからGoogleドライブへのファイルコピー方法について調べたのですが、見つかるコードサンプルは非推奨(deprecated)になっていたものが多かったので、改めて調べてみました。

公式のGoogleドライブAPIのサンプルプログラムが見つかりました。

https://developers.google.com/drive/android/examples/

demosプロジェクトのBaseDemoActivity.java がそのまま使えそうです。

ただ、このサンプルの中にAndroidのファイルをGoogleドライブにコピーするというサンプルコードが存在せず、APIを調べても見つかりませんでした。(ここまでAPIが充実してるので、fileCopy() 的な一命令でコピーしてくれる便利なAPIがあると思ったのですが…)

そこで、サンプルコードを参考し、ファイルストリームを使用してファイルをコピーするコードを作成しました。

BaseDemoActivity から派生した Activity での処理です。

final Task<DriveFolder> appFolderTask = getDriveResourceClient().getAppFolder();
final Task<DriveContents> createContentsTask = getDriveResourceClient().createContents();
final File file = new File( /* Android内のファイルパス */ );
Tasks.whenAll(appFolderTask, createContentsTask)
        .continueWithTask(task -> {
            DriveFolder appFolder = appFolderTask.getResult();
            DriveContents contents = createContentsTask.getResult();
            OutputStream outputStream = contents.getOutputStream();

            FileInputStream fileInputStream = new FileInputStream(file.getPath());
            byte[] buffer = new byte[fileInputStream.available()];
            int data;
            while ((data = fileInputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, data);
            }

            MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                    .setTitle(file.getName())
                    .setMimeType("text/plain")  // プレーンテキストファイル
                    .build();

            return getDriveResourceClient().createFile(appFolder, changeSet, contents);
        })
        .addOnSuccessListener(this,
                driveFile -> {
                    // 成功時の処理
                })
        .addOnFailureListener(this, e -> {
            // 失敗時の処理
        })
        .addOnCompleteListener(this, result -> {
            // (必要なら)完了時の処理
        });

 

1行目 getAppFolder() は、Androidアプリ専用のフォルダーでAndroidアプリからしか見えないので、動作確認時は getRootFolder() にしておいたほうが良いです。

また、Googleドライブは、Androidから同名のファイルをコピー(作成)しても上書きしてくれず、同名のファイルが何個もできるので、削除するコードも必要となってきます。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください