我已为驱动器文件设置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>
问题是更改事件随机被触发。我在两个不同的设备上测试这个应用程序。当一个设备对同步文件进行更改时,另一个设备有时会获取更改事件,但通常不会发生更改事件,或者它会造成很大的延迟。
因此,更改订阅正在运行,但出现问题是因为无法保证同步。我不知道问题出在哪里,或者即使有问题。我应该在哪里解决这个问题?
答案 0 :(得分:0)
您可能需要查看以下链接:
根据上面给出的链接,Google Drive Android API暂时使用本地数据存储,以防设备未连接到网络,并且当连接可用时,Android的同步计划程序将自动且透明地存储在Google云端硬盘中。
此外,用户文件会在不同设备之间自动同步(如果应用具有相同的命名空间并使用相同的密钥进行签名)。