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

Android Studio:Drive API废弃后实现用户偏好的谷歌云盘存读

Android 端谷歌云盘保存/加载用户偏好方案(适配2023年后API)

核心方案选择

旧Drive API已废弃,且不能要求用户操作开发者控制台,推荐使用Google Drive for Android 内置存储访问框架(SAF)——这是系统原生支持的方式,无需额外配置开发者控制台,仅需用户授权账号即可完成操作。

关键步骤及代码示例

1. 权限配置

在AndroidManifest.xml中添加必要权限:

<uses-permission android:name="android.permission.INTERNET" />
<!-- 可选:如需后台访问可添加,常规场景无需 -->
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />

2. 触发用户选择云盘位置(首次保存)

让用户在谷歌云盘中指定保存位置或直接创建新文件:

// 定义请求码
private const val REQUEST_CODE_CREATE_FILE = 1001

// 创建保存文件的Intent
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
    addCategory(Intent.CATEGORY_OPENABLE)
    type = "text/plain"
    putExtra(Intent.EXTRA_TITLE, "user_preferences.txt") // 默认文件名
    // 限定仅谷歌云盘应用响应
    putExtra("android.provider.extra.INITIAL_URI", Uri.parse("content://com.google.android.apps.docs.storage/document/acc=1;typ=doc;"))
}
startActivityForResult(intent, REQUEST_CODE_CREATE_FILE)

3. 写入用户偏好数据

在onActivityResult中处理返回结果并写入数据:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == REQUEST_CODE_CREATE_FILE && resultCode == RESULT_OK) {
        data?.data?.let { uri ->
            contentResolver.openOutputStream(uri)?.use { outputStream ->
                val preferencesStr = "theme=dark;notifications=on;auto_sync=on" // 你的偏好字符串
                outputStream.write(preferencesStr.toByteArray())
            }
        }
    }
}

4. 加载用户偏好数据

触发选择已保存的TXT文件并读取数据:

private const val REQUEST_CODE_OPEN_FILE = 1002

// 创建打开文件的Intent
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
    addCategory(Intent.CATEGORY_OPENABLE)
    type = "text/plain"
    // 限定仅谷歌云盘应用响应
    putExtra("android.provider.extra.INITIAL_URI", Uri.parse("content://com.google.android.apps.docs.storage/document/acc=1;typ=doc;"))
}
startActivityForResult(intent, REQUEST_CODE_OPEN_FILE)

读取数据的处理逻辑:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == REQUEST_CODE_OPEN_FILE && resultCode == RESULT_OK) {
        data?.data?.let { uri ->
            contentResolver.openInputStream(uri)?.use { inputStream ->
                val preferencesStr = inputStream.bufferedReader().readText()
                // 将字符串解析为应用内的偏好配置
            }
        }
    }
}

5. 持久化访问权限(可选)

若不想每次都让用户选择文件,可请求持久化权限:

data?.data?.let { uri ->
    val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
    contentResolver.takePersistableUriPermission(uri, takeFlags)
}

注意事项

  • 该方案完全依赖系统原生SAF,无需配置开发者控制台,用户仅需登录谷歌账号即可操作。
  • 无需集成旧Drive API或Drive REST API,适配2023年后的API变动。
  • 文件存储位置由用户选择,符合隐私规范,用户可完全掌控自己的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:42:32