Получить все папки Google Drive API на Android
Я использую новый API Google Drive, и я не могу получить все папки с моего Google Drive, я получаю только те папки, которые я создаю с API Google Drive... Кто-нибудь знает, почему это происходит?
это мой код:
@Override
protected void onResume() {
super.onResume();
if (mGoogleApiClient == null) {
// Create the API client and bind it to an instance variable.
// We use this instance as the callback for connection and connection
// failures.
// Since no account name is passed, the user is prompted to choose.
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
// Connect the client. Once connected, the camera is launched.
mGoogleApiClient.connect();
}
/**
* Handles resolution callbacks.
*/
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == RESULT_OK) {
mGoogleApiClient.connect();
}
}
/**
* Called when activity gets invisible. Connection to Drive service needs to
* be disconnected as soon as an activity is invisible.
*/
@Override
protected void onPause() {
if (mGoogleApiClient != null) {
mGoogleApiClient.disconnect();
}
super.onPause();
}
/**
* Called when {@code mGoogleApiClient} is connected.
*/
@Override
public void onConnected(Bundle connectionHint) {
Log.i(TAG, "GoogleApiClient connected");
rootFolder = Drive.DriveApi.getRootFolder(mGoogleApiClient);
rootFolder.listChildren(getGoogleApiClient()).setResultCallback(pruebaChildren);
}
ResultCallback<DriveApi.MetadataBufferResult> pruebaChildren = new
ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(DriveApi.MetadataBufferResult metadataBufferResult) {
if (!metadataBufferResult.getStatus().isSuccess()) {
showMessage("Problem while retrieving files");
return;
}
Log.i(TAG,"got root folder");
MetadataBuffer buffer = metadataBufferResult.getMetadataBuffer();
Log.i(TAG,"Buffer count " + buffer.getCount());
if(buffer.getCount() == 0){
createFolderApp();
}
else{
for(Metadata m : buffer){
Log.i(TAG,"Metadata name " + m.getTitle() + "(" + (m.isFolder() ? "folder" : "file") + ")");
if (m.isFolder() && m.getTitle().equals(TAG)){
Log.i(TAG,"APP FOLDER FOUND");
Drive.DriveApi.getFolder(mGoogleApiClient, m.getDriveId())
.listChildren(mGoogleApiClient)
.setResultCallback(foreachAppAplication);
}
}
}
return;
}
};
И теперь я хочу видеть все папки в rootFolder Drive, я пробую requestSync(), но результат тот же... Мне нужна помощь, пожалуйста!
И еще вопрос: как мне установить AppFolder? Я вижу только getAppFolder, но как я могу установить??
Спасибо
1 ответ
По своему дизайну GDAA поддерживает только область ФАЙЛ, т.е. он будет находить / перечислять только папки / файлы, созданные приложением Android.
Есть 2 способа обойти это:
- Используйте одно из намерений GDAA, в основном позволяя пользователю выбрать файл / папку. Таким образом, оно станет доступным для вашего приложения.
- Используйте другой API, REST Api, который поддерживает область DRIVE, предоставляя вашему приложению полный набор файлов / папок.
Если вы хотите изучить поведение двух API, я разместил на Github две разные демонстрации (демонстрационные оболочки REST и GDAA CRUD).
Вторая часть вашего вопроса не имеет ответа. Вы не устанавливаете папку приложения, вы можете только получить ее идентификатор DriveFolder. Вы используете его для создания / извлечения объектов.
DriveFolder appFldr = Drive.DriveApi.getAppFolder(mGooleApiClient);
appFldr.createFile(...);
appFldr.createFolder(...);
appFldr.listChildren(...);
appFldr.queryChildren(...);
... и не забудьте добавить область действия SCOPE_APPFOLDER
Удачи