Estoy usando Google Drive en mi aplicación. Puedo cargar datos en Google drive App folder
y obtener la identificación del archivo. Mi pregunta es, cómo descargarlo de appDataFolder
usando FileId
Así es como obtengo los ID de archivo
private List<String> getDataFromApi() throws IOException {
List<String> fileInfo = new ArrayList<String>();
FileList lst = mService.files().list()
.setSpaces("appDataFolder")
.execute();
FileList result = mService.files().list()
.setSpaces("appDataFolder")
.setFields("nextPageToken, files(id, name, mimeType)")
.execute();
List<File> files = result.getFiles();
if (files != null) {
for (File file : files) {
fileInfo.add(String.format("%s (%s) %s\n",
file.getName(), file.getId(), file.getMimeType()));
}
}
return fileInfo;
}
Estoy usando v3 de los servicios de Google Drive.
compile('com.google.apis:google-api-services-drive:v3-rev102-1.23.0') {
exclude group: 'org.apache.httpcomponents'
}
Gracias de antemano
2 respuestas
Finalmente obtuve mi respuesta. Espero que esto ayude a otros también para descargar desde appDataFolder
. Aquí estoy descargando y guardando el archivo en SD card
nombre de carpeta Spectors
. Y pasando el valor del tipo de archivo de com.google.api.services.api.drive.model.File
.
private void downloadFile(boolean useDirectDownload, File uploadedFile)
throws IOException {
java.io.File direct = new java.io.File(Environment.getExternalStorageDirectory()
+ "/Spectors");
if (!direct.exists()) {
direct.mkdirs();
}
java.io.File parentDir = new java.io.File(direct.getAbsolutePath());
if (!parentDir.exists() && !parentDir.mkdirs()) {
throw new IOException("Unable to create parent directory");
}
OutputStream out = new FileOutputStream(new java.io.File(parentDir, uploadedFile.getName()+".zip"));
com.google.api.services.drive.Drive.Files.Get files = mService.files().get(uploadedFile.getId());
files.executeMediaAndDownloadTo(out);
Log.e(TAG, "downloadFile:2 " + files.toString() + "\n"+uploadedFile.getFileExtension() );
}
También puede aplicar el siguiente enfoque para descargar el contenido de la carpeta de la aplicación
Obtener archivos de la carpeta de la aplicación con el siguiente código
private void listFiles() {
Query query =
new Query.Builder()
.addFilter(Filters.or(Filters.eq(SearchableField.MIME_TYPE, "text/html"),
Filters.eq(SearchableField.MIME_TYPE, "text/plain")))
.build();
getDriveResourceClient()
.query(query)
.addOnSuccessListener(this,
new OnSuccessListener<MetadataBuffer>() {
@Override
public void onSuccess(MetadataBuffer metadataBuffer) {
//mResultsAdapter.append(metadataBuffer);
for (int i = 0; i <metadataBuffer.getCount() ; i++) {
retrieveContents(metadataBuffer.get(i).getDriveId().asDriveFile());
}
}
}
)
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e(TAG, "Error retrieving files", e);
MainActivity.this.finish();
}
});
}
Para descargar el contenido el siguiente código
private void retrieveContents(DriveFile file) {
// [START drive_android_open_file]
Task<DriveContents> openFileTask =
getDriveResourceClient().openFile(file, DriveFile.MODE_READ_ONLY);
// [END drive_android_open_file]
// [START drive_android_read_contents]
openFileTask
.continueWithTask(task -> {
DriveContents contents = task.getResult();
// Process contents...
// [START_EXCLUDE]
// [START drive_android_read_as_string]
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(contents.getInputStream()))) {
StringBuilder builder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
builder.append(line).append("\n");
}
showMessage(getString(R.string.content_loaded));
mFileContents.setText(builder.toString());
}
// [END drive_android_read_as_string]
// [END_EXCLUDE]
// [START drive_android_discard_contents]
Task<Void> discardTask = getDriveResourceClient().discardContents(contents);
// [END drive_android_discard_contents]
return discardTask;
})
.addOnFailureListener(e -> {
// Handle failure
// [START_EXCLUDE]
Log.e(TAG, "Unable to read contents", e);
showMessage(getString(R.string.read_failed));
finish();
// [END_EXCLUDE]
});
// [END drive_android_read_contents]
}
Preguntas relacionadas
Nuevas preguntas
android
Android es el sistema operativo móvil de Google, que se utiliza para programar o desarrollar dispositivos digitales (teléfonos inteligentes, tabletas, automóviles, televisores, ropa, vidrio, IoT). Para temas relacionados con Android, use etiquetas específicas de Android, tales como intención de Android, actividad de Android, adaptador de Android, etc. Para preguntas que no sean de desarrollo o programación, pero relacionadas con el marco de Android, use este enlace: https: // android.stackexchange.com.