サーチ…


前書き

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開発者向けコンソールに新しいプロジェクトを作成します。 ここに画像の説明を入力

  • APIにアクセスするための認証情報を作成する必要があります。したがって、 資格情報作成ボタンをクリックしてください。 ここに画像の説明を入力

  • 今、ポップウィンドウが開きます。 APIキーを作成するには、リストのAPIキーオプションをクリックしますここに画像の説明を入力

  • 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が表示されます。 ここに画像の説明を入力

  • ドライブ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 APIGoogleApiClientによって処理されます。私たちは、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()メソッドが呼び出されます。

アクティビティに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");
    }

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オブジェクト、およびdriveContentsdriveContentsてファイルを作成する必要があります。結果ハンドラコールバックを呼び出して、作成されたファイルの結果を処理します。

次のコードを使用して、ユーザーのルートフォルダに新しいテキストファイルを作成します。

/**
 * 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;
            }
        };


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow