Android
API Google Диска
Поиск…
Вступление
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;
}
};