Android
GoogleドライブAPI
サーチ…
前書き
Googleドライブは、Googleが作成したファイルホスティングサービスです 。これは、ファイルストレージサービスを提供し、ユーザーがクラウド内のファイルをアップロードし、他の人と共有することができます。 GoogleドライブAPIを使用すると、パソコンや携帯端末とGoogle Drive Cloudの間でファイルを同期できます。
備考
法的
アプリケーションでGoogleドライブAndroid APIを使用する場合は、アプリケーションの「法的通知」セクションの一部としてGoogle Playサービスの属性テキストを含める必要があります。
法的通知を独立したメニュー項目として、または「情報」メニュー項目の一部として含めることをお勧めします。
実行時に属性テキストを取得するには、 GooglePlayServicesUtil.getOpenSourceSoftwareLicenseInfo()
を呼び出すことができます。
AndroidでGoogleドライブを統合する
Googleデベロッパーコンソールで新しいプロジェクトを作成する
AndroidアプリケーションをGoogleドライブと統合するには、Google Developers Consoleでプロジェクトの認証情報を作成します。そのため、Google Developer Consoleでプロジェクトを作成する必要があります。
Google Developer Consoleでプロジェクトを作成するには、次の手順を実行します。
Android用Googleデベロッパーコンソールにアクセスします。入力欄にプロジェクト名を入力し、[ 作成 ]ボタンをクリックしてGoogle開発者向けコンソールに新しいプロジェクトを作成します。
Android用Google APIを呼び出すには、APIキーが必要です。 Android KeyをクリックしてAndroidプロジェクトを特定します。
次に、APIキーを作成するために、入力フィールドにAndroid Projectのパッケージ名とSHA-1指紋を追加する必要があります。
SHA-1指紋を生成する必要があります。したがって、端末を開いてKeytoolユーティリティを実行して、SHA1の指紋を取得します。 Keytoolユーティリティを実行している間は、 キーストアのパスワードを提供する必要があります 。デフォルトの開発キーツールのパスワードは"android"です。
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
次に、証明書ページの入力フィールドにパッケージ名とSHA-1指紋を追加します。最後に、作成ボタンをクリックしてAPIキーを作成します。
これにより、Android用のAPIキーが作成されます。このAPIキーを使用してAndroidアプリとGoogleドライブを統合します。
GoogleドライブAPIを有効にする
GoogleドライブAPIを有効にして、AndroidアプリケーションからGoogleドライブに保存されているファイルにアクセスする必要があります。 GoogleドライブAPIを有効にするには、次の手順を実行します。
Googleデベロッパーコンソールのダッシュボードにアクセスし 、[ APIを有効にする ]をクリックすると、一般的なGoogle APIが表示されます。
[有効にする]ボタンをクリックして、GoogleドライブAPIを有効にします。クライアントからGoogleドライブへのアクセスが許可されます。
インターネット許可を追加する
アプリケーションにインターネットアクセスGoogleドライブファイルが必要です。次のコードを使用して、AndroidManifest.xmlファイルのインターネットアクセス許可を設定します。
<uses-permission android:name="android.permission.INTERNET" />
Google Playサービスを追加する
GoogleドライブAndroid APIを含むGoogle PlayサービスAPIを使用します 。 AndroidアプリケーションでGoogle PlayサービスSDKをセットアップする必要があります。 build.gradle
(アプリモジュール)ファイルを開き、Google PlayサービスSDKを依存関係として追加します。
dependencies {
....
compile 'com.google.android.gms:play-services:<latest_version>'
....
}
マニフェストファイルにAPIキーを追加する
AndroidアプリケーションでGoogle APIを使用するには、Google PlayサービスのAPIキーとバージョンをAndroidManifest.xmlファイルに追加する必要があります。 AndroidManifest.xmlファイルのタグ内に正しいメタデータタグを追加します。
GoogleドライブAndroid APIの接続と承認
GoogleドライブAndroid APIを認証し、Androidアプリケーションと接続する必要があります。 Googleドライブの承認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の接続を解除する
アクティビティが停止すると、アクティビティのonStop()メソッド内でdisconnect()メソッドを呼び出すことで、GoogleドライブAndroid APIとAndroidアプリケーションとの接続が切断されます 。
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient != null) {
// disconnect Google Android Drive API connection.
mGoogleApiClient.disconnect();
}
super.onPause();
}
接続コールバックと接続に失敗したリスナーを実装する
MainActivity.javaファイルにGoogle APIクライアントのConnection CallbackとConnection Failed Listenerを実装し、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");
}
Googleドライブにファイルを作成する
Googleドライブにファイルを追加します。 Drive
オブジェクトのcreateFile()
メソッドを使用して、プログラムでGoogleドライブにファイルを作成します。この例では、ユーザーのルートフォルダに新しいテキストファイルを追加しています。ファイルが追加されると、メタデータの初期セット、ファイルの内容、および親フォルダを指定する必要があります。
CreateMyFile()
コールバックメソッドを作成し、このメソッド内でDrive
オブジェクトを使用してDriveContents
リソースを取得する必要があります。次に、APIクライアントをDrive
オブジェクトに渡し、 DriveContents
結果を処理するためにdriveContentsCallback
コールバックメソッドを呼び出します。
DriveContents
リソースには、アプリケーションでのみ使用可能なファイルのバイナリストリームの一時コピーが含まれています。
public void CreateMyFile(){
fileOperation = true;
// Create new contents resource.
Drive.DriveApi.newDriveContents(mGoogleApiClient)
.setResultCallback(driveContentsCallback);
}
DriveContentの結果ハンドラ
応答を処理するには、呼び出しが成功したかどうかを確認する必要があります。呼び出しが成功した場合は、 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
オブジェクトを使用する必要があります。このオブジェクトを使用して、タイトル(ファイル名)とファイルタイプを設定します。また、 DriveFolder
クラスのcreateFile()
メソッドを使用し、GoogleクライアントAPI、 MetaDataChangeSet
オブジェクト、およびdriveContents
を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;
}
};