Если вы пытаетесь одновременно загрузить файл и поделиться им с другой учетной записью, вам нужно подождать несколько секунд, прежде чем выполнять запрос разрешений.Я мог бы добиться этого в своем приложении для Android, например, (используя Kotlin и RxJava):
private fun uploadFile(accessToken: String, fileName: String, fileContent: String) {
Observable.just(Unit)
.subscribeOn(Schedulers.io())
.subscribe({
val httpTransport = NetHttpTransport()
val credential = Credential.Builder(BearerToken.authorizationHeaderAccessMethod())
.build()
credential.accessToken = accessToken
val service = Drive.Builder(httpTransport, JacksonFactory.getDefaultInstance(),
credential)
.setApplicationName("Your App Name")
.build()
val fileMetadata = File()
fileMetadata.name = fileName
val localFile = createFile(fileName, fileContent)
val mediaContent = InputStreamContent("text/plain", localFile);
val file = service.files().create(fileMetadata, mediaContent)
.setFields("id")
.execute()
Log.d(TAG, "File ID: " + file.id)
Observable.interval(10, TimeUnit.SECONDS)
.take(1)
.subscribe {
val callback = object : JsonBatchCallback<Permission>() {
@Throws(IOException::class)
override fun onFailure(e: GoogleJsonError, responseHeaders: HttpHeaders) {
Log.d(TAG, "error: ${e.message}")
}
@Throws(IOException::class)
override fun onSuccess(permission: Permission, responseHeaders: HttpHeaders) {
Log.d(TAG, "Permission ID: ${permission.id}")
}
}
val batch = service.batch()
val userPermission = Permission()
.setType("user")
.setRole("writer")
.setEmailAddress("account_you_want_to_share_with@email.com")
service.permissions().create(file.id, userPermission)
.setFields("id")
.queue(batch, callback)
batch.execute()
}
}) {
Log.d(TAG, "error: ", it)
}
}
private fun createFile(fileName: String, fileContent: String): InputStream? {
try {
val outputStreamWriter = OutputStreamWriter(
application.openFileOutput(fileName, Context.MODE_PRIVATE))
outputStreamWriter.write(fileContent)
outputStreamWriter.close()
return application.openFileInput(fileName)
} catch (e: IOException) {
Log.e(TAG, "File write failed: ", e)
}
return null
}