You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android中将EditText内容上传至Google Drive并保存为Google Doc?

Android实现EditText内容上传为Google Drive中的Google Doc格式

当然可行,核心是借助Google Drive API和Google Docs API完成文件创建与内容写入,以下是具体实现步骤:

一、前期配置

  1. 启用API
    登录Google Cloud Console,为你的项目启用Google Drive API和Google Docs API。
  2. 配置OAuth客户端
    创建Android类型的OAuth客户端ID,填写你的应用包名和SHA-1指纹,下载google-services.json文件并放入项目的app/目录下。
  3. 添加依赖
    在app/build.gradle的dependencies块中添加以下依赖(版本号可根据最新稳定版调整):
    implementation 'com.google.android.gms:play-services-auth:20.7.0'
    implementation 'com.google.apis:google-api-services-drive:v3-rev20240422-2.0.0'
    implementation 'com.google.apis:google-api-services-docs:v1-rev20240412-2.0.0'
    implementation 'com.google.oauth-client:google-oauth-client-android:1.34.1'
    

二、实现账号认证

要操作Google Drive,首先需要获取用户的授权,这里用Google Sign-In完成:

private val REQUEST_CODE_SIGN_IN = 1001
private lateinit var googleSignInClient: GoogleSignInClient
private var driveService: Drive? = null
private var docsService: Docs? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // 初始化登录配置,请求Drive和Docs的权限
    val signInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestScopes(Scope(DriveScopes.DRIVE_FILE))
        .requestScopes(Scope(DocsScopes.DOCUMENTS))
        .requestEmail()
        .build()

    googleSignInClient = GoogleSignIn.getClient(this, signInOptions)

    // 点击上传按钮触发登录
    uploadBtn.setOnClickListener {
        startActivityForResult(googleSignInClient.signInIntent, REQUEST_CODE_SIGN_IN)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == REQUEST_CODE_SIGN_IN) {
        val task = GoogleSignIn.getSignedInAccountFromIntent(data)
        try {
            val account = task.getResult(ApiException::class.java)
            // 获取认证凭证
            val credential = GoogleAccountCredential.usingOAuth2(
                this, listOf(DriveScopes.DRIVE_FILE, DocsScopes.DOCUMENTS)
            ).setSelectedAccount(account.account)

            // 初始化Drive和Docs服务实例
            driveService = Drive.Builder(
                AndroidHttp.newCompatibleTransport(),
                GsonFactory.getDefaultInstance(),
                credential
            ).setApplicationName("你的应用名称").build()

            docsService = Docs.Builder(
                AndroidHttp.newCompatibleTransport(),
                GsonFactory.getDefaultInstance(),
                credential
            ).setApplicationName("你的应用名称").build()

            // 执行上传操作
            val editTextContent = contentEt.text.toString()
            uploadToGoogleDoc(editTextContent)
        } catch (e: ApiException) {
            Toast.makeText(this, "认证失败:${e.statusCode}", Toast.LENGTH_SHORT).show()
        }
    }
}

三、创建Google Doc并写入内容

通过Drive API创建空白的Google Doc,再用Docs API将EditText的内容写入文档:

private fun uploadToGoogleDoc(content: String) = CoroutineScope(Dispatchers.IO).launch {
    try {
        // 1. 创建空白Google Doc文件
        val fileMetadata = File()
            .setName("自定义文档名称") // 可替换为用户输入或时间戳生成的文件名
            .setMimeType("application/vnd.google-apps.document")

        val createdFile = driveService?.files()?.create(fileMetadata)
            ?.setFields("id")
            ?.execute() ?: throw IOException("创建文档失败")

        // 2. 向文档插入EditText内容
        val insertRequest = InsertTextRequest()
            .setLocation(Location().setIndex(1)) // 从文档起始位置插入
            .setText(content)

        val batchRequest = BatchUpdateDocumentRequest()
            .setRequests(listOf(Request().setInsertText(insertRequest)))

        docsService?.documents()?.batchUpdate(createdFile.id, batchRequest)?.execute()

        // 回到主线程提示用户
        withContext(Dispatchers.Main) {
            Toast.makeText(this@MainActivity, "文档已成功上传到Google Drive", Toast.LENGTH_SHORT).show()
        }
    } catch (e: IOException) {
        withContext(Dispatchers.Main) {
            Toast.makeText(this@MainActivity, "上传失败:${e.message}", Toast.LENGTH_SHORT).show()
        }
    }
}

四、注意事项

  • 所有网络请求必须在后台线程执行,示例中用Kotlin协程处理,也可使用AsyncTask或Executor
  • 建议使用DRIVE_FILE范围权限(仅允许访问应用创建的文件),比全范围DRIVE更容易通过Google审核
  • 需处理Google Play服务未安装、网络异常、认证过期等异常情况
  • 文件名可根据需求自定义,比如结合当前时间戳避免重复

内容的提问来源于stack exchange,提问作者George Wann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:15:43