Google云端硬盘API随机同步

时间:2017-11-08 23:04:45

标签: android google-drive-android-api

我已为驱动器文件设置Change Subscription,这是设置方式:

public SyncChangeListener(Context context) {
    apiClient = new GoogleApiClient.Builder(context)
            .addApi(Drive.API)
            .addScope(Drive.SCOPE_APPFOLDER)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
    apiClient.connect();
}

@Override
public void onConnectionSuspended(int i) { ... }

@Override
public void onConnectionFailed(ConnectionResult connectionResult) { ... }

@Override
public void onConnected(@Nullable Bundle bundle) {
    Query query = new Query.Builder().addFilter(Filters.eq(SearchableField.TITLE, "Sync.bak")).build();
    Drive.DriveApi.query(apiClient, query).setResultCallback(querycallback);
}

final private ResultCallback<DriveApi.MetadataBufferResult> querycallback = new ResultCallback<DriveApi.MetadataBufferResult>() {
    @Override
    public void onResult(@NonNull DriveApi.MetadataBufferResult result) {
        if (!result.getStatus().isSuccess()) {
            Log.i("SyncChangeListener", "Status NOT SUCCESS");
            return;
        }

        if (result.getMetadataBuffer().getCount() > 0) {
            DriveResource dr = result.getMetadataBuffer().get(0).getDriveId().asDriveResource();
            dr.addChangeSubscription(apiClient);
        }

        result.getMetadataBuffer().release();
    }
};

我还设置了DriveEventService扩展类

public class SyncChangeEventService extends DriveEventService {

    @Override
    public void onChange(ChangeEvent event) {
        // ...
    }
}

我已将其设置在清单中:

<service
    android:name=".sync.SyncChangeEventService"
    android:exported="true">
    <intent-filter>
        <action android:name="com.google.android.gms.drive.events.HANDLE_EVENT"/>
    </intent-filter>
</service>

问题是更改事件随机被触发。我在两个不同的设备上测试这个应用程序。当一个设备对同步文件进行更改时,另一个设备有时会获取更改事件,但通常不会发生更改事件,或者它会造成很大的延迟。

因此,更改订阅正在运行,但出现问题是因为无法保证同步。我不知道问题出在哪里,或者即使有问题。我应该在哪里解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可能需要查看以下链接:

根据上面给出的链接,Google Drive Android API暂时使用本地数据存储,以防设备未连接到网络,并且当连接可用时,Android的同步计划程序将自动且透明地存储在Google云端硬盘中。

此外,用户文件会在不同设备之间自动同步(如果应用具有相同的命名空间并使用相同的密钥进行签名)。