无耻地把自己推销为谢丽尔的搭档,我可以给你一些具体的观点,因为我以前经历过这个挑战。这就是我所做的:
- 在系统根目录中为我的应用程序创建一个唯一的“根目录”-“MyStupidAppRoot”。在这里,您将遇到主要挑战,因为您是按名称创建它的,如果您将创建基于它不存在,您可能无法可靠地成为能够检查它。但它正在变得更好,请参阅SO 22382099和SO 22515028。
- 一旦有了可靠的锚点“MyStupidAppRoot”,您就可以创建Cheryl 提到的AppFolder(尚不可用)或创建自己的可见文件(同样,独特的创建挑战),可以保留您想要的任何内容。比如你所有的 PREFERENCE 字符串。我什至勇敢地在那里存储了完整的 SQLite DB 文件。这是可能的,因为您将 byte[] 缓冲区写入文件。
- 然后,任何其他带有您应用程序的设备都可以找到“MyStupidAppRoot”,从那里获取资源文件并读取它。
应该注意的是,您自己的文件夹/文件和AppFolder之间的主要区别在于,用户无法读取AppFolder的内容,但仍然可以将其删除。
这是将 byte[] 缓冲区写入文件的方法。为了简单起见,它是 'await' 版本,但这里有一个异步版本'createFileAsync()' 。
public DriveFile createFileWait(DriveFolder fldr, String name, String mime, byte[] buff) {
DriveFile drvFile = null;
if (isConnected()) try {
ContentsResult rslt = Drive.DriveApi.newContents(_gac).await();
if (rslt.getStatus().isSuccess()) {
Contents cont = rslt.getContents();
cont.getOutputStream().write(buff);
MetadataChangeSet meta = (mime == null) ?
new MetadataChangeSet.Builder().setTitle(name).build() :
new MetadataChangeSet.Builder().setTitle(name).setMimeType(mime).build();
drvFile = fldr.createFile(_gac, meta, cont).await().getDriveFile();
}
} catch (Exception e) {}
return drvFile;
}
关于身份证:
您上面提到的DriveId是一个对象,可以转换为SO 21800257中讨论的 2 个不同的字符串。这取决于你选择哪一个。'encodeToString()'中的长的更容易被'decodeFromString()'转回DriveId,较短的可以在http地址中轻松识别,但需要async / await方法来取回DriveId - fetchDriveId() .