Вопрос:

Google Drive API синхронизируется случайным образом

android google-drive-android-api

87 просмотра

1 ответ

642 Репутация автора

Я настроил Изменить подписку на файл диска, вот как он установлен:

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>

Проблема в том, что событие изменения происходит случайным образом. Я тестирую это приложение на двух разных устройствах. Когда одно устройство вносит изменения в синхронизированный файл, другое устройство иногда получает событие изменения, но чаще это не происходит, либо происходит с огромной задержкой.

Итак, подписка на изменения работает, но что-то не так, потому что синхронизация не гарантируется. Я не знаю, где проблема, или даже если есть одна. Где я должен искать, чтобы решить эту проблему?

Автор: AndroidGuy Источник Размещён: 08.11.2017 11:04

Ответы (1)


0 плюса

5198 Репутация автора

Вы можете проверить эти ссылки:

По ссылкам, указанным выше, Google Drive Android API временно использует локальное хранилище данных на случай, если устройство не подключено к сети, и автоматически и прозрачно будет храниться в облаке Google Drive с помощью планировщика синхронизации Android при наличии подключения.

Кроме того, пользовательские файлы автоматически синхронизируются между различными устройствами ( при условии, что приложение имеет одинаковое пространство имен и подписано одним и тем же ключом ).

Автор: Teyam Размещён: 10.11.2017 11:27
Вопросы из категории :
32x32