¿Basura, Eliminar en la nueva API de Android de Google Drive?

ACTUALIZACIÓN (mayo de 2015):
la funcionalidad ‘basura’ se ha implementado en GDAA, por lo que la pregunta a continuación es irrelevante.

PREGUNTA ORIGINAL:
Mientras juego con la nueva “API de Android de Google Drive” (GDAA), me encuentro con algunas discrepancias que no puedo entender. Básicamente, tengo una aplicación antigua que utiliza la interfaz “com.google.api.services.drive” (insertar, parchar, actualizar) y ME ENCANTARÍA portarla a GDAA.

Primero, aplicación web GDAA vs. drive.google.com.
Con el servicio anterior, utilicé el scope DriveScopes.DRIVE_FILE, así que asumí comportamientos / resultados similares. Los archivos creados con el antiguo “DriveScopes.DRIVE_FILE” pueden ser eliminados por mí (el propietario de Drive) en ” https://drive.google.com ” (supongo que mi scope es DRIVE allí) y las siguientes consultas de aplicaciones de Android no encontrarán ellos. Se comporta como era de esperar:

  1. La aplicación de Android crea archivos.
  2. El usuario los elimina en “drive.google.com”.
  3. La aplicación de Android ya no los ve.

Con el nuevo GDAA, parece que no funciona. Lo que me lleva al segundo punto:

Función DELETE / TRASH.
Estaba intentando probar la funcionalidad CRUD y no pude encontrar DELETE en absoluto (de nuevo, puede ser mi ignorancia / miopía). Eliminarlos de “drive.google.com” los hace invisibles allí, pero la aplicación de Android aún los ve. Los metadatos pueden consultar a través de “isTrashed ()”, pero no hay nada en “MetadataChangeSet.Builder” que me permita eliminarlos / trash, solo setMimeType (), setStarred (), setTitle ().

Estoy perdido, por favor ayuda.

Google Drive Android API no se sincroniza con los recursos remotos al instante. Dependiendo del progtwigdor, puede llevar un tiempo sincronizar. La progtwigción depende de los componentes de sincronización de la cuenta de Android que se aseguran de que el ancho de banda de la red y la duración de la batería se conservan y usan de manera eficiente.

Además, a partir de la Vista previa del desarrollador, no admitimos la eliminación o la eliminación. Pero es probable que la próxima versión respalde estas acciones.

Si desea tener un control total sobre la sincronización, no use Google Drive Android NEW API (al menos por ahora). Todavía no es lo suficientemente bueno (octubre de 2014) o funciona de manera diferente a la API ANTIGUA “en tiempo real” . Los principales problemas son que no se puede eliminar el archivo, los cambios no son en tiempo real, los metadatos a menudo se guardan en la memoria caché (cuando realizo una consulta de búsqueda, en los resultados puedo ver los archivos eliminados incluso después de muchas horas). Probablemente debido a algunas optimizaciones, los servicios de la unidad se ejecutan cuando lo desean y cómo quieren, por lo que casi nada está bajo su control: nunca se sabe cómo utiliza el servicio de disco el caché, y no se puede obligar al servicio de la unidad a “hacer el trabajo en este momento porque necesito”.

Ah, y otra desventaja es que ese código es mucho más complicado que la misma lógica creada en OLD API 🙂

Si está trabajando con la carpeta de aplicaciones (invisible para el usuario), su objective es eliminar el archivo solo para guardar el espacio de usuario y nunca volver a seleccionarlo. Por lo tanto, puede usar la estrategia “vaciar y olvidar”.

Desde @Mark Carter (porque la API de Android Drive cambió):

private void deleteContents(final DriveFile driveFile) { driveFile.open(this.client, DriveFile.MODE_WRITE_ONLY, null).setResultCallback(new ResultCallback() { @Override public void onResult(DriveApi.DriveContentsResult result) { if (!result.getStatus().isSuccess()) { // oh noes! return; } final DriveContents contents = result.getDriveContents(); try { MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder().setTitle("deleted").build(); contents.commit(PhotoAdapter.this.client, metadataChangeSet).setResultCallback(new ResultCallback() { @Override public void onResult(Status status) { if (!status.isSuccess()) { // more oh noes! return; } // nicely marked, now destroy data OutputStream out = contents.getOutputStream(); try { out.write(0x0); //nicely empty } catch (IOException e) { //oh, no... throw new RuntimeException(e); }finally { try { out.close(); } catch (IOException e) { //what we can do? Just log it } } } }); } catch (Exception e) { //Unsuccessful. Log it, rollback contents and cry contents.discard(PhotoAdapter.this.client); } } }); } 

Si bien la API de Google Drive para Android todavía no admite la eliminación, puede eliminar los contenidos (y, al mismo tiempo, cambiar el nombre del título, para que pueda ignorarlo en el futuro). Esto podría ser útil para desarrolladores usando AppFolder.

 private void deleteContents(final DriveFile driveFile) { driveFile.open(mGoogleApiClient, DriveFile.MODE_WRITE_ONLY, null).setResultCallback(new ResultCallback() { @Override public void onResult(DriveContentsResult result) { if (!result.getStatus().isSuccess()) { // oh noes! return; } DriveContents contents = result.getDriveContents(); try { MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder().setTitle(DELETED_DRIVE_TITLE).build(); contents.commit(mGoogleApiClient, metadataChangeSet).setResultCallback( new ResultCallback() { @Override public void onResult(Status status) { if (!status.isSuccess()) { // more oh noes! return; } // nicely deleted } }); } catch (Exception e) { contents.discard(mGoogleApiClient); } } }); } 

La nueva versión de Google Play Services (7.0.0 / marzo de 2015) finalmente presenta DriveRessource.trash() . Ver https://developer.android.com/reference/com/google/android/gms/drive/DriveResource.html

Todavía no lo he probado. Volveré a informar pronto.

// edit Bueno, lo probé y funciona … pero no para los archivos dentro de la carpeta de la aplicación: Cannot trash App Folder or files inside the App Folder. Aparentemente no puedes usar esta característica mientras usas la carpeta de la aplicación.

@Burcu Dogan, no estoy seguro si verá esto, pero según https://github.com/googledrive/android-demos/issues/4#issuecomment-33759142 ¿habrá una muestra para ejecutar las operaciones de GDrive desde un servicio?

A partir de los servicios 7.5 de Google Play, se admiten tanto la eliminación como la papelera: https://developers.google.com/drive/release-notes#drive_android_api_google_play_services_75_-_may_28th_2015

Recomendamos utilizar la papelera para los archivos visibles del usuario en lugar de eliminarla, para brindarles a los usuarios la oportunidad de restaurar cualquier contenido que haya sido eliminado accidentalmente. Eliminar es permanente y se recomienda solo para el contenido de la carpeta de la aplicación, donde la papelera no está disponible.

    Intereting Posts