卸载/重新安装后,App Folder文件不可见

时间:2014-07-23 16:55:32

标签: google-drive-android-api

我在调试环境中注意到这一点,为了测试持久性数据存储,初始设置等,我必须做很多重新安装...它可能与生产无关,但我还是提到这个只是为了通知其他开发者。

应用在其应用文件夹中创建的所有文件都不可见'手动卸载/重新安装后的查询(例如,从IDE)。这同样适用于编码驱动ID' - 它不再有效。

可能是设计和#39;但它有效地创造了孤儿'在app文件夹中,直到' drive.google.com>手动清理为止。管理应用> [yourapp]>选项>删除隐藏的应用数据'。如果应用程序依赖于按元数据,标题等查找文件,它也会产生问题,因为这些似乎已经消失了。正如我所说,不是生产问题,但它可以在开发过程中产生一些挫败感。

任何友好的Google员工都能证实这一点吗?重新安装后还有其他方法可以获取这些文件吗?

3 个答案:

答案 0 :(得分:4)

尝试这种方法:

requestSync()中使用onConnected()作为:

@Override
public void onConnected(Bundle connectionHint) {
    super.onConnected(connectionHint);
    Drive.DriveApi.requestSync(getGoogleApiClient()).setResultCallback(syncCallback);
}

然后,在其回调中,使用以下方法查询驱动器的内容:

final private ResultCallback<Status> syncCallback = new ResultCallback<Status>() {
    @Override
    public void onResult(@NonNull Status status) {
        if (!status.isSuccess()) {
            showMessage("Problem while retrieving results");
            return;
        }
        query = new Query.Builder()
                .addFilter(Filters.and(Filters.eq(SearchableField.TITLE, "title"),
                        Filters.eq(SearchableField.TRASHED, false)))
                .build();
        Drive.DriveApi.query(getGoogleApiClient(), query)
                .setResultCallback(metadataCallback);
    }
};

然后,在其回调中,如果找到,则使用以下命令检索文件:

final private ResultCallback<DriveApi.MetadataBufferResult> metadataCallback =
        new ResultCallback<DriveApi.MetadataBufferResult>() {
    @SuppressLint("SetTextI18n")
    @Override
    public void onResult(@NonNull DriveApi.MetadataBufferResult result) {
        if (!result.getStatus().isSuccess()) {
            showMessage("Problem while retrieving results");
            return;
        }

        MetadataBuffer mdb = result.getMetadataBuffer();
        for (Metadata md : mdb) {
            Date createdDate = md.getCreatedDate();
            DriveId driveId = md.getDriveId();
        }

        readFromDrive(driveId);
    }
};

完成工作!

希望有所帮助!

答案 1 :(得分:3)

看起来Google Play服务存在问题。 (https://stackoverflow.com/a/26541831/2228408) 要进行测试,您可以通过清除Google Play服务数据(设置&gt;应用&gt; Google Play服务&gt;管理空间&gt;清除所有数据)来执行此操作。

或者,此时,您需要使用Drive SDK v2实现它。

答案 2 :(得分:0)

我认为你的设计是正确的。

通过检查,我得出的结论是,在应用程序将数据放入AppFolder文件夹之前,Drive不会向设备同步,但要尝试和麻烦。因此,不可能检查由另一个设备或先前实现放置的AppFolder的存在。我假设这是尝试创建一致的干净安装。

我可以看到有几种策略可以解决这个问题:

1)在AppFolder上放置虚拟数据,然后同步并重新检查。

2)接受在第一个实例中存在重复的可能性,因为您无法按定义访问现有文件,您将创建新副本,并使用自定义元数据来提出区分同名文件的方案并选择你想要保留的那个(基本上在两个不同的文件中实现冲突合并策略)。

我已经完成了第二次,我有一个更新号来比较来自不同设备的数据并决定我想要哪个版本,因此决定是上传,下载还是单独留下。由于我的数据是一个SQLite数据库,我还有一些代码只能在更新完成后同步,我故意考虑人们一次更新两个设备愚蠢而且结果是一致的但未定义哪个会赢。