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