O DriveFolder.listChildren () não mostra todos os seus filhos
Estou criando um aplicativo que funciona com o Google Drive.
Preciso obter uma lista de TODOS os arquivos dentro de uma pasta, mas parece que não é possível: quando chamo o método listFiles (), não consigo obter todos os arquivos dentro de um DriveFolder. Mas não é só isso, na lista de arquivos que recebo, existem alguns arquivos que eu excluí anteriormente.
Eu li que isso pode ser causado por um atraso de sincronização devido aos serviços do Google Play, mas eu selecionei a opção 'Sincronizar agora' nas configurações da minha conta, então acho que o problema não é causado por esse atraso.
Este é o método que eu estou falandohttp://developer.android.com/reference/com/google/android/gms/drive/DriveFolder.html#listChildren(com.google.android.gms.common.api.GoogleApiClient)
E este é o código que escrevi:
public class ServicePull extends IntentService implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener{
private GoogleApiClient mApiClient;
public static void startPull(Context context) {
Intent intent = new Intent(context, ServicePull.class);
context.startService(intent);
}
public ServicePull() {
super("ServicePull");
}
@Override
protected void onHandleIntent(Intent intent) {
mApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mApiClient.connect();
}
@Override
public void onConnected(Bundle bundle) {
NotificationStatus.notify(this, "On Connected", "mApiClient Connected");
DriveFolder driveFolder = Drive.DriveApi.getRootFolder(mApiClient);
driveFolder.listChildren(mApiClient).setResultCallback(rootFolderCallback);
}
@Override
public void onConnectionSuspended(int i) {
NotificationStatus.notify(this, "On Suspended", "mApiClient Suspended");
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
NotificationStatus.notify(this, "On failed", "mApiClient failed");
}
final private ResultCallback<DriveApi.MetadataBufferResult> rootFolderCallback =
new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(DriveApi.MetadataBufferResult metadataBufferResult) {
log("got root folder");
MetadataBuffer buffer = metadataBufferResult.getMetadataBuffer();
log("Buffer count " + buffer.getCount());
for(Metadata m : buffer){
log("Metadata name " + m.getTitle() + "(" + (m.isFolder() ? "folder" : "file") + ")");
if (m.isFolder() && m.getTitle().equals("Neewie"))
Drive.DriveApi.getFolder(mApiClient, m.getDriveId())
.listChildren(mApiClient)
.setResultCallback(fileCallback);
}
}
};
final private ResultCallback<DriveApi.MetadataBufferResult> fileCallback =
new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(DriveApi.MetadataBufferResult metadataBufferResult) {
log("got file children");
MetadataBuffer buffer = metadataBufferResult.getMetadataBuffer();
//for(Metadata m : buffer){
log("Buffer count " + buffer.getCount());
for(int i =0;i<buffer.getCount();i++){
Metadata m = buffer.get(i);
log(m.toString());
Drive.DriveApi.getFile(mApiClient, m.getDriveId())
.openContents(mApiClient, DriveFile.MODE_READ_ONLY,
new DriveFile.DownloadProgressListener() {
@Override
public void onProgress(long bytesDownloaded, long bytesExpected) {
// Update progress dialog with the latest progress.
int progress = (int) (bytesDownloaded * 100 / bytesExpected);
Log.wtf("TAG", String.format("Loading progress: %d percent", progress));
}
}
)
.setResultCallback(contentsCallback);
}
}
};
final private ResultCallback<DriveApi.ContentsResult> contentsCallback =
new ResultCallback<DriveApi.ContentsResult>() {
@Override
public void onResult(DriveApi.ContentsResult contentsResult) {
log("got file contents");
File file = new File("storage/emulated/0/Downtests/tessing.txt");
file.mkdirs();
try {
InputStream input = contentsResult.getContents().getInputStream();
OutputStream output = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len;
while ((len = input.read(buf)) > 0) {
output.write(buf, 0, len);
}
input.close();
output.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
private void log(String s){
Log.wtf("ServicePull", s);
}
}
Obviamente, criei uma pasta chamada 'Neewie' e dentro dela um arquivo. Eu tenho um DriveFolder apontando para a pasta Neewie, mas quando listChildren, recebo um MetadataBuffer com contagem 0.
Preciso fazer algo para listar TODOS os arquivos? Há algo de errado com a biblioteca gms?