通过Google Drive API存储的appDataFolder数据未在存储管理器显示
问题:Google Drive appDataFolder数据无法在存储管理器和Drive应用中显示
我通过DriveScopes.DRIVE_APPDATA权限访问Google Drive,将数据存储至appDataFolder。已知该数据默认隐藏,仅在特定位置可见,但出现以下异常:
- 在Google账号的Storage Manager中,未列出我的应用及对应数据,仅能看到WhatsApp;
- 在Google Drive应用的菜单/备份页面,同样看不到我的应用,仅显示WhatsApp。
已确认以下事实:
- 在Google账号的第三方应用与服务中能看到我的应用(与WhatsApp一同列出);
- 可通过代码获取存储的文件列表;
- 账号可用存储空间因数据占用而减少,说明数据确实存在,但未被展示。
测试数据生成代码
// A loremp ipsum string of 1024 bytes private const val MOCK_TEXT = """ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sollicitudin bibendum metus, quis placerat risus placerat sit amet. In eu eros consectetur, suscipit nulla ut, porta dui. Nulla accumsan, libero ac vestibulum aliquam, tortor elit aliquet neque, non suscipit erat augue at dui. Etiam iaculis vitae ex vitae elementum. Quisque laoreet convallis arcu ut dictum. Ut non blandit ipsum, at rhoncus lorem. Donec non finibus diam, ac consequat augue. Sed convallis in magna vel pharetra. Vestibulum eu enim in ex hendrerit vestibulum eu sed tortor. Donec egestas, neque nec pulvinar euismod, nulla odio pulvinar felis, a vulputate lectus turpis sit amet justo. Proin ultrices porttitor aliquam. Mauris rhoncus luctus gravida. Praesent pharetra tempor vulputate. In pretium feugiat leo eget porttitor. Morbi vel tristique leo. Pellentesque pretium eros magna, ac interdum ipsum aliquam in. Proin sapien quam, mollis vitae scelerisque nec, euismod nec enim. Maecenas magna quam, ornare sed est a, aliquam pellentesque eu. """ private fun generateData(): String { val items = mutableListOf<String>() repeat(1024) { items.add(MOCK_TEXT) } return items.joinToString() } private fun generateFile(fileName: String): GFile { return GFile().apply { this.name = fileName this.parents = listOf("appDataFolder") } } private fun saveMockData(context: Context, accessToken: String) { val credentials = GoogleCredentials.create(AccessToken(accessToken, Date.from(timeNow().plusMinutes(5).toInstant()))) val requestInitializer = HttpCredentialsAdapter(credentials) val drive = Drive .Builder( NetHttpTransport(), GsonFactory.getDefaultInstance(), requestInitializer ) .setApplicationName("MyApp") .build() val request = drive.about().get() request.fields = "user" val user = request.execute().user.emailAddress repeat(10) { count -> val gfile = generateFile("Mock File $count") val content = ByteArrayContent("text/plain", generateData().toByteArray()) drive.Files().create(gfile, content).setFields("id").execute() val result = drive.files().list().setSpaces("appDataFolder").setFields("*").execute() val totalSize = result.files.sumOf { it.quotaBytesUsed }.div(1024).div(1024) Timber.v("Total Size: $totalSize") } val result = drive.files().list().setSpaces("appDataFolder").setFields("*").execute() result.files.forEach { file -> Timber.d("${file.name} [${file.quotaBytesUsed}]") // To Delete Files // drive.Files().delete(file.id).execute() } } fun Context.uriForFile(file: File): Uri { return FileProvider.getUriForFile(this, BuildConfig.FILE_PROVIDER, file) }
内容的提问来源于stack exchange,提问作者Ryan Gordon
相关产品推荐
相关产品推荐

