DriveFolder.listChildren () не показывает всех своих потомков
Я делаю приложение, которое работает с Google Drive.
Мне нужно получить список ВСЕХ файлов внутри папки, но кажется, что это невозможно: когда я вызываю метод listFiles (), я не могу получить все файлы внутри DriveFolder. Но не только это, в списке файлов, которые я получаю, есть некоторые файлы, которые я удалил ранее.
Я прочитал, что это может быть вызвано задержкой синхронизации из-за сервисов Google Play, но я выбрал опцию «Синхронизировать сейчас» в настройках своего аккаунта, поэтому я думаю, что проблема не вызвана этой задержкой.
Это метод, о котором я говорюhttp://developer.android.com/reference/com/google/android/gms/drive/DriveFolder.html#listChildren(com.google.android.gms.common.api.GoogleApiClient)
И это код, который я написал:
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);
}
}
Очевидно, я создал папку с именем «Neewie» и внутри нее файл. У меня есть DriveFolder, указывающий на папку Neewie, но когда listChildren это, я получаю MetadataBuffer со счетчиком 0.
Нужно ли что-то делать, чтобы перечислить ВСЕ файлы? Что-то не так с библиотекой gms?