Google Drive API-Android-Как получить идентификатор файла диска?
Я пытаюсь разработать приложение для android, которое может читать xml-файл, хранящийся в моей папке Google drive, идея сначала пытается открыть файл и обработать содержимое.
я прочитала Google Drive API docs для android и я дошел до того, что я потерялся, он работает с содержимым файла.
в соответствии с этим руководством способ открыть файл с диска таков:
DriveFile file = ...
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);`
Поиск я понял, что полный код (что они не включить есть):
DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient,DriveId.bg(id));
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);`
Ну проблема в том, что я не знаю, файл "код". Я пробовал id из веб-ссылки google drive, что-то вроде этого (https://drive.google.com/open?id=1EafJ-T6H4xI9VaUuUO5FMVb9Y30xyr7OHuISQ53avso&authuser=0 но не сработало.
3 ответов
вы можете использовать метод запроса DriveAPI, чтобы получить любую информацию о конкретном файле. необходимо определить объект запроса следующим образом:
Query query = new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE, "HelloWorld.java"))
.build();
и установите функцию обратного вызова для итерации по результатам:
Drive.DriveApi.query(googleApiClient, query)
.setResultCallback(new OnChildrenRetrievedCallback() {
@Override
public void onChildrenRetrieved(MetadataBufferResult result) {
// Iterate over the matching Metadata instances in mdResultSet
}
});
более подробную информацию по теме вы можете найти здесь:https://developers.google.com/drive/android/queries
решением, которое я нашел для этой проблемы, было создание файла из приложения. Использование класса ("CreateFileActivity.java") из приложения Google drive api demo.
С этим классом я сохраняю возвращаемый Driveid из нового файла в глобальной переменной DriveId.
final private ResultCallback<DriveFolder.DriveFileResult> fileCallback = new
ResultCallback<DriveFolder.DriveFileResult>() {
@Override
public void onResult(DriveFolder.DriveFileResult result) {
if (!result.getStatus().isSuccess()) {
Log.e("","Error while trying to create the file");
return;
}
Id=result.getDriveFile().getDriveId();
Log.e("","Created a file with content: " + Id);
}
};
затем с этим идентификатором в другом методе я вызываю файл и читаю его (если я хочу, я могу редактировать эту информацию о файле из Google Drive Web App):
public void leer(){
DriveFile file = Drive.DriveApi.getFile(getGoogleApiClient(),Id);
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null)
.setResultCallback(contentsOpenedCallback);
}
ResultCallback<DriveApi.DriveContentsResult> contentsOpenedCallback =
new ResultCallback<DriveApi.DriveContentsResult>() {
@Override
public void onResult(DriveApi.DriveContentsResult result) {
if (!result.getStatus().isSuccess()) {
Log.e("Error:","No se puede abrir el archivo o no se encuentra");
return;
}
// DriveContents object contains pointers
// to the actual byte stream
DriveContents contents = result.getDriveContents();
BufferedReader reader = new BufferedReader(new InputStreamReader(contents.getInputStream()));
StringBuilder builder = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
String contentsAsString = builder.toString();
Log.e("RESULT:",contentsAsString);
}
};
Я играл с этим несколько месяцев назад, и у меня все еще есть код на github. Может быть!--1-->очень устаревший (libver 15 или около того), но он может служить точкой отсчета, и это (я надеюсь, просто). посмотреть здесь. Опусти его, подключи, проходи. Исправить то, что больше не работает :-). Я бросил его некоторое время назад.
имейте в виду, что для объектов Google Drive Android API есть 2 разных идентификатора, см. так 22841237.
В общем, вы обычно начинаете с зная имя файла / папки, запрос GDAA, чтобы получить список объектов. Каждый из них даст DriveID и ResourceID. DriveID используется в вашем приложении для управления объектами (не означает ничего за пределами вашего Android-приложения и/или устройства). ResourceID-это строка, которая отображается в различных формах в URL-адресах и может использоваться вне вашего приложения (например, веб-браузера...). Посмотри на это!--11-->фантик чтобы получить некоторое чувство, как это завод. Но опять же, это было несколько версий назад, поэтому нет никаких гарантий. удача...