Невозможно создать каталог токенов для Google Диска - PullRequest
2 голосов
/ 22 апреля 2019

Я пытаюсь подключиться к Google Drive из приложения для Android, которое в конечном итоге будет загружать аудиодорожки с Drive.Я не могу создать каталог / token / для аутентификации.

Я разделил процесс создания GoogleAuthorizationCodeFlow, чтобы показать, как далеко продвигается процесс до сбоя.Я также попытался предварительно создать каталог / token /, но это также не удалось.

Это соответствующий код.Поскольку я использую внутреннее хранилище, в файле манифеста не было запрошено никаких разрешений.

    @Override
    public void onReceive(Context context, Intent intent) {

        Log.i("LOGLEARN", "Starting AlarmReceiver");
        Drive service;
        try {
            HttpTransport HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport();
            service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
                    .setApplicationName("Morning Learning")
                    .build();

            FileList result = service.files().list()
                    .setPageSize(10)
                    .setFields("nextPageToken, files(id, name)")
                    .execute();
            List<File> files = result.getFiles();
            if (files == null || files.isEmpty()) {
                Log.i(DEBUG,"No files found.");
            } else {
                Log.i(DEBUG, "Files:");
                for (File file : files) {
                    Log.i(DEBUG, "%s (%s) - " + file.getName() + file.getId());
                }
            }
        } catch (Exception exception) {
            // Handle Exception here
            Log.i(DEBUG, "Exception: " + exception.toString());
        }
    }

    private static Credential getCredentials(final HttpTransport HTTP_TRANSPORT) throws IOException {
        String DEBUG = "LOGLEARN";
        // Load client secrets.
        InputStream in = AlarmReceiver.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
        if (in == null) {
            throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
        }
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

        // Build flow and trigger user authorization request.
        java.io.File tokenFolder = new java.io.File(Environment.getDataDirectory() +
                java.io.File.separator + TOKENS_DIRECTORY_PATH);
        if (!tokenFolder.exists()) {
            Log.i(DEBUG, "Token Folder does not exist " + tokenFolder.toString());
            tokenFolder.mkdirs();
        }

        if (!tokenFolder.exists()) {
            Log.i(DEBUG, "Token Folder still does not exist " + tokenFolder.toString());
        } else {
            Log.i(DEBUG, "Token Folder now exists " + tokenFolder.toString());
        }

        GoogleAuthorizationCodeFlow.Builder build = new GoogleAuthorizationCodeFlow.Builder(
                HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES);
        Log.i(DEBUG, "Checkpoint 1");

        build.setDataStoreFactory(new FileDataStoreFactory(tokenFolder));

        Log.i(DEBUG, "Checkpoint 2");
        build.setAccessType("offline");

        Log.i(DEBUG, "Checkpoint 3");
        GoogleAuthorizationCodeFlow flow = build.build();

        Log.i(DEBUG, "Checkpoint end");

        LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
        return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
    }

Я ожидал бы получить какой-то список файлов, записанный в LogCat, но вместо этого я получил следующее:

 I/LOGLEARN: Starting AlarmReceiver
 I/LOGLEARN: Token Folder does not exist /data/tokens
 I/LOGLEARN: Token Folder still does not exist /data/tokens
 I/LOGLEARN: Checkpoint 1
 I/LOGLEARN: Exception: java.io.IOException: unable to create directory: /data/tokens

Происходят две странные вещи, которые я не понимаю.

  1. В этой строке происходит сбой build.setDataStoreFactory(new FileDataStoreFactory(tokenFolder));

  2. tokenFolder.mkdirs(); не создает каталог должным образом и не вызывает исключение.

Кроме того, я не понимаю терминологию имени класса GoogleAuthorizationCodeFlow.Builder - это просто имя классас полной остановкой в ​​нем или ссылкой на внутренний класс или что-то еще?

1 Ответ

0 голосов
/ 22 апреля 2019

Я надеюсь, что вы в конечном итоге получите ответ на эту "create / token / directory" проблему.

Если хуже до худшего, и вам просто нужно получить доступ к файлам MP3, где вызнать их путь на Google Диске ...

Замените только XXXXX идентификатором вашего файла.Теперь байты MP3 будут загружаться, поэтому либо считывайте в bytearray, либо используйте в качестве URL-адреса в вашем MP3-декодере / проигрывателе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...