在 Android 中集成 Google 云端硬盘
在 Google Developer Console 上创建一个新项目
要将 Android 应用程序与 Google 云端硬盘集成,请在 Google Developers Console 中创建项目凭据。因此,我们需要在 Google Developer Console 上创建一个项目。
要在 Google Developer Console 上创建项目,请按以下步骤操作:
-
转到适用于 Android 的 Google Developer Console 。在输入字段中填写项目名称,然后单击“ 创建” 按钮以在 Google Developer 控制台上创建新项目。
-
我们需要创建访问 API 的凭据。因此,单击“ 创建凭据” 按钮。
-
现在,将打开一个弹出窗口。单击列表中的 API Key 选项以创建 API 密钥。
-
我们需要一个 API 密钥才能调用适用于 Android 的 Google API。因此,单击 Android Key 以识别你的 Android 项目。
-
接下来,我们需要在输入字段中添加 Android 项目的包名称和 SHA-1 指纹以创建 API 密钥。
-
我们需要生成 SHA-1 指纹。因此,打开终端并运行 Keytool 实用程序以获取 SHA1 指纹。在运行 Keytool 实用程序时,你需要提供密钥库密码。默认开发 keytool 密码是
android
。keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
-
现在,在凭据页面的输入字段中添加包名称和 SHA-1 指纹。最后,单击创建按钮以创建 API 密钥。
-
这将为 Android 创建 API 密钥。我们将使用此 API 密钥将 Android 应用程序与 Google 云端硬盘集成。
启用 Google Drive API
我们需要启用 Google Drive Api 才能从 Android 应用程序访问存储在 Google 云端硬盘中的文件。要启用 Google Drive API,请按以下步骤操作:
-
转到你的 Google Developer 控制台信息中心 ,然后点击**启用 API 获取密钥等凭据,**你就会看到流行的 Google API。
-
点击云端硬盘 API 链接,打开 Google 云端硬盘 API 的概述页面。
-
单击启用按钮以启用 Google Drive API。它允许客户端访问 Google 云端硬盘。
添加 Internet 权限
应用程序需要 Internet 访问 Google Drive 文件。使用以下代码在 AndroidManifest.xml 文件中设置 Internet 权限:
<uses-permission android:name="android.permission.INTERNET" />
添加 Google Play 服务
我们将使用 Google Play 服务 API ,其中包含 Google Drive Android API 。因此,我们需要在 Android 应用中设置 Google Play 服务 SDK。打开你的 build.gradle
(应用程序模块)文件,并添加 Google Play 服务 SDK 作为依赖项。
dependencies {
....
compile 'com.google.android.gms:play-services:<latest_version>'
....
}
在 Manifest 文件中添加 API 密钥
要在 Android 应用中使用 Google API,我们需要在 AndroidManifest.xml 文件中添加 API 密钥和 Google Play 服务版本。在 AndroidManifest.xml 文件的标记内添加正确的元数据标记。
连接并授权 Google Drive Android API
我们需要对 Google Drive Android API 和 Android 应用程序进行身份验证和连接。 Google Drive Android API 的授权由 GoogleApiClient 处理。我们将在 onResume()
方法中使用 GoogleApiClient 。 ****
/**
* 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();
}
断开 Google Deive Android API
当活动停止时,我们会通过调用 activity 的 onStop()
方法中的 disconnect()
方法断开与 Android 应用程序的 Google Drive Android API 连接。 ****
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient != null) {
// disconnect Google Android Drive API connection.
mGoogleApiClient.disconnect();
}
super.onPause();
}
实现连接回调和连接失败的侦听器
我们将在 MainActivity.java 文件中实现 Google API 客户端的连接回调和连接失败监听器,以了解有关 Google API 客户端连接的状态。这些侦听器提供 onConnected()
,onConnectionFailed(),onConnectionSuspended()
方法来处理 app 和 Drive 之间的连接问题。
如果用户已授权应用程序,则调用 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");
}