Как найти файл Google Диска по ID?

Я работаю над проектом, в котором мне нужно загрузить файл на Google Диск, чтобы загрузить его с помощью другого приложения.

Я хотел использовать идентификатор диска, который я получаю, создавая файл, чтобы найти его позже, но, похоже, это не работает.

Я использовал пример из Google, чтобы получить идентификатор:

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        switch (requestCode) {

            case REQUEST_CODE_CREATOR:
                if (resultCode == RESULT_OK) {

                     driveId =  data.getParcelableExtra(
                            OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);
                    showMessage("File created with ID: " + driveId);


                }

                break;
            default:
                super.onActivityResult(requestCode, resultCode, data);
                break;
        }
    }

Пока это работает, я получаю идентификатор диска.

После этого я хотел протестировать его, используя пример "Files: get" из Google Developers-page, где я получил следующую ошибку:

 {
    "error": {
    "errors": [
    {
     "domain": "global",
     "reason": "notFound",
     "message": "File not found: CAESABiCASCQ1OnN-VMoAA==",
     "locationType": "other",
     "location": "file"
    }
     ],
     "code": 404,
     "message": "File not found: CAESABiCASCQ1OnN-VMoAA=="
     }
      }

Похоже, этот идентификатор не является идентификатором для поиска файлов.

Должно быть что-то, что я пропустил, но я не знаю, что.

Я новичок в программировании, особенно в Google и Android, и я был бы очень рад, если бы кто-нибудь помог мне своими ответами.

Спасибо.


person e.Fro    schedule 29.10.2015    source источник


Ответы (1)


В вашем подходе есть две проблемы.

1/ Вы не можете использовать DriveId для чего-либо за пределами вашего экземпляра приложения Android, вам нужно использовать ResourceId (см. SO 32210970)

2/ DriveId, который вы показываете выше, является «предварительным» DriveId, который возвращается GooPlaySvcs до того, как объект будет зафиксирован (загружен) (см. SO 22874657). Кроме того, вы не можете получить действительный ResourceId, пока объект не будет зафиксирован.

См. также SO 33355665, SO 29030110

Если вы намерены вывести ResourceId «снаружи» (в другое приложение), все будет в порядке. Если вы решите использовать этот ResourceId в одном и том же приложении Android, смешивая два API (GDAA и REST), вы потенциально можете вызвать проблемы с задержкой, поскольку GDAA — это «буферный» слой между вашим приложением и REST API (вы уже сталкивались с одним из них с вашим «недействительным» DriveId).

Удачи

person seanpj    schedule 29.10.2015