首页 > 解决方案 > 无需手动登录即可将文件上传到 Google Drive

问题描述

我正在构建一个执行测试并将结果以 .xlsx 格式保存在我的 google 驱动器文件夹中的 android 应用程序(我有它的 ID)。我需要做的是避免登录部分,因为我不需要知道谁在上传它。目前我写了这段代码,但它不起作用,需要登录:

private void requestSignIn() {
    GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestScopes(new Scope(DriveScopes.DRIVE_FILE))
            .build();
    GoogleSignInClient client = GoogleSignIn.getClient(this, signInOptions);
    startActivityForResult(client.getSignInIntent(), 400);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case 400:
            if (requestCode == RESULT_OK) {
                handleSignInIntent(data);
            }
            break;
    }
}

private void handleSignInIntent(Intent data) {
    GoogleSignIn.getSignedInAccountFromIntent(data)
            .addOnSuccessListener(new OnSuccessListener<GoogleSignInAccount>() {
                @Override
                public void onSuccess(GoogleSignInAccount googleSignInAccount) {
                    String folderId = "123456789-ID";
                    GoogleAccountCredential credential = GoogleAccountCredential
                            .usingOAuth2(UserList.this, Collections.singleton((folderId)));
                    credential.setSelectedAccount(googleSignInAccount.getAccount());
                    Drive googleDriveService = new Drive.Builder(
                            AndroidHttp.newCompatibleTransport(),
                            new GsonFactory(),
                            credential)
                            .setApplicationName("Williams")
                            .build();
                    driveServiceHelper = new DriveServiceHelper(googleDriveService);
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    System.out.println("Failed");
                }
            });
}

private void uploadExcel() {
    String filePath = Environment.getExternalStorageDirectory()+"/Download/risultatiTest.xlsx";
    driveServiceHelper.createFileExcel(filePath);
}

然后我有另一个类来执行操作:

public class DriveServiceHelper {

private final Executor mExecutor = Executors.newSingleThreadExecutor();
private Drive mDriveService;

public DriveServiceHelper(Drive mDriveService) {
    this.mDriveService = mDriveService;
}

public Task<String> createFileExcel(String filePath) {
    return Tasks.call(mExecutor, () -> {
        String folderId = "123456789-ID";
        File fileMetadata = new File();
        fileMetadata.setName("results.xlsx");
        fileMetadata.setParents(Collections.singletonList(folderId));
        java.io.File file = new java.io.File(filePath);
        FileContent mediaContent = new FileContent("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", file);
        File myFile = mDriveService.files().create(fileMetadata, mediaContent)
                .setFields("id, parents")
                .execute();
        System.out.println("File ID: " + myFile.getId());
        return myFile.getId();
    });
}

我怎么解决这个问题?

标签: androidgoogle-cloud-platformgoogle-drive-apixlsx

解决方案


推荐阅读