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

Kotlin应用连接Google Drive时OpenFileActivity无响应问题求助

排查Google Drive OpenFileActivity无响应的思路

核心问题

作为Kotlin新手开发Google Drive文件选择应用,遵循旧教程实现后,点击启动文件选择的按钮无任何弹窗反应,代码能执行到newOpenFileActivityIntentSender行,但后续流程无进展,已更新依赖但无效。

排查步骤

1. 检查driveClient初始化与Task状态

driveClient可能未正确初始化或连接失败,导致返回的Task处于异常状态。替换原continueWith逻辑,添加成功/失败监听以定位问题:

private fun pickItem(openOptions: OpenFileActivityOptions) {
    val openTask = driveClient?.newOpenFileActivityIntentSender(openOptions)
    openTask?.let {
        it.addOnSuccessListener { intentSender ->
            ActivityCompat.startIntentSenderForResult(
                activity, intentSender, REQUEST_CODE_OPEN_ITEM,
                null, 0, 0, 0, null
            )
        }
        it.addOnFailureListener { e ->
            // 打印错误栈,查看具体失败原因
            e.printStackTrace()
        }
    } ?: run {
        // driveClient为空,检查初始化逻辑
        Log.e("DriveService", "driveClient未初始化")
    }
}

2. 确认回调线程环境

continueWith默认在当前线程执行,而启动Intent必须在主线程。改用主线程回调:

openTask?.continueWithOnMainThread { task ->
    if (task.isSuccessful) {
        ActivityCompat.startIntentSenderForResult(
            activity, task.result, REQUEST_CODE_OPEN_ITEM,
            null, 0, 0, 0, null
        )
    } else {
        task.exception?.printStackTrace()
    }
}

3. 验证Drive连接与授权状态

  • 检查driveClient初始化逻辑,确保是通过Drive.getDriveClient(context, googleAccount)正确获取的已授权账号实例
  • 在调用pickFiles前,确认driveClient.isConnected为true,未连接则先触发账号授权和连接流程

4. 检查OpenFileActivityOptions配置

  • 确认mimeTypes有效,避免传入空数组或错误类型,测试时可直接设置builder.setMimeType(arrayOf("*/*"))
  • 暂时跳过config参数,直接设置固定标题测试:builder.setActivityTitle("选择Drive文件")

5. 统一依赖版本兼容性

当前play-services-drive:17.0.0版本过旧,建议更新到匹配的稳定版,保持Auth与Drive组件版本一致:

implementation "com.google.android.gms:play-services-auth:20.7.0"
implementation "com.google.android.gms:play-services-drive:20.0.1"

6. 排查Activity生命周期与权限

  • 确保调用startIntentSenderForResult的activity处于活跃状态,未被销毁
  • 确认AndroidManifest.xml已添加<uses-permission android:name="android.permission.GET_ACCOUNTS"/>,且Android 6.0+已获取运行时权限

7. 测试基础Intent发送

临时替换代码,发送系统文件选择Intent,验证startActivityForResult功能正常:

// 在pickItem中临时添加测试代码
val testIntent = Intent(Intent.ACTION_GET_CONTENT).apply {
    type = "*/*"
}
activity.startActivityForResult(testIntent, REQUEST_CODE_OPEN_ITEM)

如果系统选择器能正常弹出,说明问题集中在Google Drive的IntentSender生成流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:42:24