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
相关产品推荐
相关产品推荐

