android - 无需手动登录即可将文件上传到 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();
});
}
我怎么解决这个问题?
解决方案
推荐阅读
- javascript - div 中的简单 Intifite Scroll (React)
- python-3.x - impala.error.HiveServer2Error:重试 3 次后失败
- angular - 预提交挂钩中的 TSLint 因文件不存在而失败。如何解决这个问题?
- python - 我如何使用代理身份验证 Python Selenium?
- google-cloud-platform - 如何从 GCE vm 实例匿名发送 http 请求以防止验证码?
- php - 如何从模型传递值以选择输入使用 laravel eloquent
- spring-boot - Spring 中 Rabbit 的几个 queueNames
- html - Flex 列中的元素重叠
- reactjs - 如何将 jwt 令牌从 ReactNative 传递到 webview
- .net - XC1020:XAML MSBuild 任务中发生构建错误:“无法加载文件或程序集或其依赖项之一