在 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");
    }