在 Android 中集成 Google 云端硬盘

在 Google Developer Console 上创建一个新项目

要将 Android 应用程序与 Google 云端硬盘集成,请在 Google Developers Console 中创建项目凭据。因此,我们需要在 Google Developer Console 上创建一个项目。

要在 Google Developer Console 上创建项目,请按以下步骤操作:

  • 转到适用于 Android 的 Google Developer Console 。在输入字段中填写项目名称,然后单击“ 创建” 按钮以在 Google Developer 控制台上创建新项目。 StackOverflow 文档

  • 我们需要创建访问 API 的凭据。因此,单击“ 创建凭据” 按钮。 StackOverflow 文档

  • 现在,将打开一个弹出窗口。单击列表中的 API Key 选项以创建 API 密钥。 StackOverflow 文档

  • 我们需要一个 API 密钥才能调用适用于 Android 的 Google API。因此,单击 Android Key 以识别你的 Android 项目。 StackOverflow 文档

  • 接下来,我们需要在输入字段中添加 Android 项目的包名称和 SHA-1 指纹以创建 API 密钥。 StackOverflow 文档

  • 我们需要生成 SHA-1 指纹。因此,打开终端并运行 Keytool 实用程序以获取 SHA1 指纹。在运行 Keytool 实用程序时,你需要提供密钥库密码。默认开发 keytool 密码是 androidkeytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v StackOverflow 文档

  • 现在,在凭据页面的输入字段中添加包名称SHA-1 指纹。最后,单击创建按钮以创建 API 密钥。 StackOverflow 文档

  • 这将为 Android 创建 API 密钥。我们将使用此 API 密钥将 Android 应用程序与 Google 云端硬盘集成。 StackOverflow 文档

启用 Google Drive API

我们需要启用 Google Drive Api 才能从 Android 应用程序访问存储在 Google 云端硬盘中的文件。要启用 Google Drive API,请按以下步骤操作:

  • 转到你的 Google Developer 控制台信息中心 ,然后点击**启用 API 获取密钥等凭据,**你就会看到流行的 Google API。 StackOverflow 文档

  • 点击云端硬盘 API 链接,打开 Goog​​le 云端硬盘 API 的概述页面。 StackOverflow 文档

  • 单击启用按钮以启用 Google Drive API。它允许客户端访问 Google 云端硬盘。 StackOverflow 文档

添加 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();
    }

断开 Goog​​le 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() 方法。

你需要在活动中实现 ConnectionCallbacksOnConnectionFailedListener 。在 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");
    }