Поиск…


Вступление

Google Drive - это служба хостинга файлов, созданная Google . Он предоставляет службу хранения файлов и позволяет пользователю загружать файлы в облаке, а также делиться с другими людьми. Используя Google Drive API, мы можем синхронизировать файлы между компьютером или мобильным устройством и областью Google Диска.

замечания

легальный

Если вы используете Android API Google Диска в своем приложении, вы должны включить текст атрибуции Google Play Services в раздел «Юридические уведомления» в своем приложении.

Рекомендуется включать юридические уведомления в качестве отдельного элемента меню или как часть элемента меню «О программе».

Вы можете позвонить в GooglePlayServicesUtil.getOpenSourceSoftwareLicenseInfo() чтобы получить текст атрибуции во время выполнения.

Интеграция Google Диска в Android

Создание нового проекта в консоли разработчика Google

Чтобы интегрировать приложение Android с Google Диском, создайте учетные данные проекта в Google Developers Console. Итак, нам нужно создать проект на консоли Google Developer.

Чтобы создать проект в Google Developer Console, выполните следующие действия:

  • Перейдите в Google Developer Console для Android. Введите название проекта в поле ввода и нажмите кнопку « Создать» , чтобы создать новый проект на консоли разработчика Google. введите описание изображения здесь

  • Нам нужно создать учетные данные для доступа к API. Итак, нажмите кнопку « Создать учетные данные» . введите описание изображения здесь

  • Теперь откроется всплывающее окно. Нажмите кнопку API Key в списке, чтобы создать ключ API. введите описание изображения здесь

  • Нам нужен ключ API для вызова API Google для Android. Итак, нажмите на Android-ключ, чтобы определить свой Android-проект. введите описание изображения здесь

  • Затем нам нужно добавить имя пакета Android Project и SHA-1 отпечатка пальца в поля ввода для создания ключа API. введите описание изображения здесь

  • Нам нужно создать отпечаток SHA-1 . Итак, откройте свой терминал и запустите утилиту Keytool, чтобы получить отпечаток SHA1. При запуске утилиты Keytool вам необходимо предоставить пароль хранилища ключей . Пароль по умолчанию для keytool - «android» . keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v введите описание изображения здесь

  • Теперь добавьте имя пакета и отпечаток SHA-1 в поля ввода на странице учетных данных. Наконец, нажмите кнопку «Создать», чтобы создать ключ API. введите описание изображения здесь

  • Это создаст ключ API для Android. Мы будем использовать этот ключ API для интеграции приложения Android с Google Диском. введите описание изображения здесь

Включить API Диска Google

Нам нужно включить Google Drive Api для доступа к файлам, хранящимся на Google Диске, из приложения Android. Чтобы включить API Google Диска, выполните следующие действия:

  • Перейдите на панель инструментов консоли разработчика Google и нажмите « Включить API», чтобы получить учетные данные, такие как ключи, после чего вы увидите популярные API Google. введите описание изображения здесь

  • Нажмите ссылку API Диска, чтобы открыть страницу обзора API Google Диска. введите описание изображения здесь

  • Нажмите кнопку «Включить», чтобы включить API дисков Google. Он позволяет клиенту получить доступ к Google Диску. введите описание изображения здесь

Добавить разрешение в Интернете

App необходим доступ в Интернет Google Drive файлы. Используйте следующий код для настройки разрешений Интернета в файле AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

Добавление сервисов Google Play

Мы будем использовать API сервисов Google Play, который включает в себя API Android для Google Диска . Итак, нам нужно настроить SDK сервисов Google Play в приложении Android. Откройте файл build.gradle (app module) и добавьте SDK сервисов Google Play в качестве зависимостей.

dependencies {
  ....
    compile 'com.google.android.gms:play-services:<latest_version>'
  ....
}

Добавить ключ API в файл манифеста

Чтобы использовать Google API в приложении для Android, нам нужно добавить ключ API и версию Службы Google Play в файле AndroidManifest.xml. Добавьте теги метаданных в тег файла AndroidManifest.xml.

Подключить и авторизировать API Google Диска Android

Нам необходимо аутентифицировать и подключить Android-приложение Google Диска с Android-приложением. Авторизация Google Диска Android API обрабатывается GoogleApiClient . Мы будем использовать метод GoogleApiClient внутри метода onResume () .

/**
 * Called when the activity will start interacting with the user.
 * At this point your activity is at the top of the activity stack,
 * with user input going to it.
 */
@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();
        }

        mGoogleApiClient.connect();
    }

Отключить API Google Deive для Android

Когда активность прекратится, мы отключим соединение Google Android Android API с Android-приложением, вызвав метод disconnect () внутри метода onStop () .

@Override
protected void onStop() {
    super.onStop();
    if (mGoogleApiClient != null) {

         // disconnect Google Android Drive API connection.
         mGoogleApiClient.disconnect();
    }
    super.onPause();
}

Реализовать обратные вызовы соединения и подключенный прослушиватель

Мы реализуем Connection Callbacks и Connection Failed Listener клиента Google API в файле MainActivity.java, чтобы узнать статус подключения клиента Google API. Эти слушатели предоставляют onConnected (), onConnectionFailed (), onConnectionSuspended () метод обработки проблем подключения между приложением и Диском.

Если пользователь разрешил приложение, вызывается метод onConnected () . Если пользователь не имеет авторизованного приложения, вызывается метод onConnectionFailed (), и пользователю отображается сообщение о том, что ваше приложение не имеет права доступа к Google Диску. В случае приостановки соединения вызывается метод onConnectionSuspended () .

Вам необходимо реализовать ConnectionCallbacks и OnConnectionFailedListener в своей деятельности. Используйте следующий код в файле Java.

@Override
    public void onConnectionFailed(ConnectionResult result) {

        // Called whenever the API client fails to connect.
        Log.i(TAG, "GoogleApiClient connection failed:" + result.toString());

        if (!result.hasResolution()) {

            // show the localized error dialog.
            GoogleApiAvailability.getInstance().getErrorDialog(this, result.getErrorCode(), 0).show();
            return;
        }

        /**
         *  The failure has a resolution. Resolve it.
         *  Called typically when the app is not yet authorized, and an  authorization
         *  dialog is displayed to the user.
         */

        try {

            result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION);

        } catch (SendIntentException e) {

            Log.e(TAG, "Exception while starting resolution activity", e);
        }
    }

   /**
    * It invoked when Google API client connected
    * @param connectionHint
    */
    @Override
    public void onConnected(Bundle connectionHint) {

        Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show();
    }

   /**
    * It invoked when connection suspended
    * @param cause
    */
    @Override
    public void onConnectionSuspended(int cause) {

        Log.i(TAG, "GoogleApiClient connection suspended");
    }

Создание файла на Google Диске

Мы добавим файл на Google Диск. Мы будем использовать метод createFile() объекта Drive для создания файла программно на Google Диске. В этом примере мы добавляем новый текстовый файл в корневую папку пользователя. Когда файл добавляется, нам нужно указать начальный набор метаданных, содержимого файла и родительской папки.

Нам нужно создать метод обратного вызова CreateMyFile() и в рамках этого метода используйте объект « Drive для извлечения ресурса DriveContents . Затем мы передаем клиент API на объект « Drive и вызываем driveContentsCallback обратного вызова driveContentsCallback для обработки результата DriveContents .

DriveContents содержит временную копию двоичного потока файла, доступного только для приложения.

public void CreateMyFile(){
    fileOperation = true;
    // Create new contents resource.
    Drive.DriveApi.newDriveContents(mGoogleApiClient)
                  .setResultCallback(driveContentsCallback);
}

Обработчик результатов DriveContents

Для обработки ответа требуется проверить, был ли вызов успешным или нет. Если вызов был успешным, мы можем получить ресурс DriveContents .

Мы создадим обработчик результатов DriveContents . В рамках этого метода мы вызываем метод CreateFileOnGoogleDrive() и передаем результат DriveContentsResult :

/**
 * This is the Result result handler of Drive contents.
 * This callback method calls the CreateFileOnGoogleDrive() method.
 */
final ResultCallback<DriveContentsResult> driveContentsCallback =
         new ResultCallback<DriveContentsResult>() {
            @Override
            public void onResult(DriveContentsResult result) {
                if (result.getStatus().isSuccess()) {
                    if (fileOperation == true){
                        CreateFileOnGoogleDrive(result);
                    }
                }
            }
        };

Создать файл программно

Для создания файлов нам нужно использовать объект MetadataChangeSet . Используя этот объект, мы устанавливаем заголовок (имя файла) и тип файла. Кроме того, мы должны использовать метод createFile() класса DriveFolder и передать API-интерфейс клиента Google, объект MetaDataChangeSet и driveContents для создания файла. Мы вызываем обратный вызов обработчика результата для обработки результата созданного файла.

Мы используем следующий код для создания нового текстового файла в корневой папке пользователя:

/**
 * Create a file in the root folder using a MetadataChangeSet object.
 * @param result
 */
public void CreateFileOnGoogleDrive(DriveContentsResult result){

    final DriveContents driveContents = result.getDriveContents();

    // Perform I/O off the UI thread.
    new Thread() {
        @Override
        public void run() {
            // Write content to DriveContents.
            OutputStream outputStream = driveContents.getOutputStream();
            Writer writer = new OutputStreamWriter(outputStream);
            try {
                writer.write("Hello Christlin!");
                writer.close();
            } catch (IOException e) {
                Log.e(TAG, e.getMessage());
            }

            MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                    .setTitle("My First Drive File")
                    .setMimeType("text/plain")
                    .setStarred(true).build();

            // Create a file in the root folder.
            Drive.DriveApi.getRootFolder(mGoogleApiClient)
                    .createFile(mGoogleApiClient, changeSet, driveContents)
                    setResultCallback(fileCallback);
        }
   }.start();
}

Результат обработки созданного файла

Следующий код создаст метод обратного вызова для обработки результата созданного файла:

/**
 * Handle result of Created file
 */
final private ResultCallback<DriveFolder.DriveFileResult> fileCallback = new
        ResultCallback<DriveFolder.DriveFileResult>() {
            @Override
            public void onResult(DriveFolder.DriveFileResult result) {
                if (result.getStatus().isSuccess()) {
                    Toast.makeText(getApplicationContext(), "file created: "+
                                result.getDriveFile().getDriveId(), Toast.LENGTH_LONG).show();
                }
                return;
            }
        };


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow