studio - Cómo obtener DriveId de la carpeta creada en Google Drive Android API
sgoliver android studio (4)
Si tiene los metadatos para la carpeta (o un objeto DriveFolder, desde el cual puede obtener los metadatos), puede simplemente llamar a getDriveId .
Si tiene el recurso web, puede obtener DriveId usando esa identificación de recurso usando fetchDriveId
Tengo carpetas en mi cuenta de Google Drive y quiero agregar archivos en una carpeta específica. ¿Cómo puedo hacerlo? Por ejemplo, necesitaba DriveId (EXISTING_FOLDER_ID), pero no conozco DriveID mi carpeta, solo sé nombre.
DE ACUERDO. Experimenté el mismo problema con las demos de Drive en Github: https://github.com/googledrive/android-demos
En la parte inferior del archivo Léame, dice:
Si realmente desea ejecutar esta aplicación de muestra (aunque se proporciona principalmente para que pueda leer el código), deberá registrar un cliente OAuth 2.0 para el paquete com.google.android.gms.drive.sample.demo con su poseer las propias claves de depuración y establecer los ID de recursos a los que tiene acceso. Las definiciones de ID de recurso están encendidas:
com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FOLDER_ID com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FILE_ID
Realmente no especificaron cómo exactamente uno debería obtener y establecer el resourceID para las constantes EXISTING_FOLDER_ID e EXISTING_FILE_ID definidas en el archivo BaseDemoActivity y después de leer el comentario de seanpj más arriba, utilicé su método número 3 para encontrar los DriveID para poder agregarlo a la aplicación de demostración para que se ejecute correctamente.
Todo lo que necesitas hacer es ir a Drive en tu PC y luego hacer clic en el botón "enlace" en la parte superior.
Una parte del enlace dice "id = XXXXXXXXXXX". Copie eso y péguelo en el archivo BaseDemoActivity en la aplicación de demostración. Haga esto tanto para un archivo como para una carpeta que cree usted mismo en Drive.
La aplicación de demostración debería ejecutarse ahora correctamente.
puedes usar la consulta para encontrar la carpeta
Query query = new Query.Builder().addFilter(Filters.and(
Filters.eq(SearchableField.TITLE, "folder name"),
Filters.eq(SearchableField.TRASHED, false))).build();
Tengo un tutorial de ejemplo http://wiki.workassis.com/android-google-drive-api-deleted-folder-still-exists-in-query/ en este tutorial que están llamando asincrónicamente
@smokybob. No sé si ayuda con la pregunta original, pero según su comentario:
Aquí hay un fragmento de código que debe obtener su carpeta / archivo DriveId. Los argumentos ''title'', ''mime'' y ''fldr'' son opcionales. En caso de que pase null por ''fldr'', la búsqueda es global (dentro del alcance FILE de la aplicación), de lo contrario dentro de la carpeta especificada (aunque no en las subcarpetas). Utiliza el sabor más simple - ''await ()'', que debe ejecutarse fuera del subproceso de la interfaz de usuario.
Sin embargo, ten cuidado, los nombres de carpeta / archivo no son entidades únicas en el universo de Google Drive. ¡Puedes tener múltiples archivos / carpetas con el mismo nombre en una sola carpeta!
GoogleApiClent _gac; // initialized elsewhere
//find files, folders. ANY ''null'' ARGUMENT VALUE MEANS ''any''
public void findAll(String title, String mime, DriveFolder fldr) {
ArrayList<Filter> fltrs = new ArrayList<Filter>();
fltrs.add(Filters.eq(SearchableField.TRASHED, false));
if (title != null) fltrs.add(Filters.eq(SearchableField.TITLE, title));
if (mime != null) fltrs.add(Filters.eq(SearchableField.MIME_TYPE, mime));
Query qry = new Query.Builder().addFilter(Filters.and(fltrs)).build();
MetadataBufferResult rslt = (fldr == null) ?
Drive.DriveApi.query(_gac, qry).await() :
fldr.queryChildren(_gac, qry).await();
if (rslt.getStatus().isSuccess()) {
MetadataBuffer mdb = null;
try {
mdb = rslt.getMetadataBuffer();
if (mdb != null) {
for (Metadata md : mdb) {
if (md == null) continue;
DriveId dId = md.getDriveId(); // here is the "Drive ID"
String title = md.getTitle();
String mime = md.getMimeType();
// ...
}
}
} finally { if (mdb != null) mdb.close(); }
}
}
En términos generales, puede obtener el ''DriveId'' que necesita de:
- nombre de archivo / carpeta como se muestra en el código anterior, o
- el identificador de cadena que tienes de ''encodeToString ()''. Lo uso para el almacenamiento en caché de la ID de carpeta MYROOT, por ejemplo, o
- el identificador de cadena que tienes de ''getResourceId ()''. Esta es la cadena que ves en la dirección html. Pero dado que su único alcance es ARCHIVO, no confíe en usarlo para abrir algo que su aplicación no creó.
Los identificadores 2 y 3 son cadenas, por lo que pueden confundirse. El identificador 2 es más rápido al recuperar la identificación del variador (a través de decodeFromString ()). El identificador 3 es más lento de recuperar (a través de fetchDriveId ()), pero es útil si necesita llevar su identificación a otra parte (Apps Script, por ejemplo). Ver también SO 21800257
En cuanto a la creación de archivos / carpetas, tengo algún código en GitHub aquí . Si observa awaits / MainActivity.java ... buildTree (), verá la creación de carpetas / archivos recursivamente al construir un árbol de carpetas simple.