恥知らずに自分をシェリルの相棒に昇進させたので、以前にこの試練を経験したことがあるので、具体的なポイントをいくつか挙げることができます. これは私がしたことです:
- システムルート「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;
}
ID について:
上記のDriveIdはオブジェクトであり、SO 21800257で説明されているように、2 つの異なる文字列に変換できます。どちらを選ぶかはあなた次第です。「encodeToString()」からの長いものは、「decodeFromString()」によって簡単に DriveId に戻すことができます。短いものは http アドレスで簡単に認識できますが、DriveId を取得するには async / await メソッドが必要です - fetchDriveId() .