質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

268閲覧

android-demosで、Cannot find DriveId. Are you authorized to view this file?

kbys32

総合スコア55

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2017/09/15 12:25

編集2017/09/17 08:02

お世話になります。

google drive と androidアプリの連携を勉強しています。

https://github.com/googledrive
において、android-demosというプロジェクトをダウンロードし、
実機にて動作させました。

アプリのホーム画面から、Create a file という選択肢を選んで、
実機が使っているアカウントが持つグーグルドライブに、
ファイルが作られることが確認できました。

しかし、Edit Contentsを選ぶと、
Cannot find DriveId. Are you authorized to view this file?
というメッセージが現れるので、そもそもの接続が失敗しているようです。

@Override public void onConnected(Bundle connectionHint) { super.onConnected(connectionHint); final ResultCallback<DriveIdResult> idCallback = new ResultCallback<DriveIdResult>() { @Override public void onResult(DriveIdResult result) { if (!result.getStatus().isSuccess()) {//isSucessがfalseになっている showMessage("Cannot find DriveId. Are you authorized to view this file?"); return; } DriveId driveId = result.getDriveId(); DriveFile file = driveId.asDriveFile(); new EditContentsAsyncTask(EditContentsActivity.this).execute(file); } }; Drive.DriveApi.fetchDriveId(getGoogleApiClient(), EXISTING_FILE_ID) .setResultCallback(idCallback); }

どうすれば接続に成功しますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

方々探し回って、このような形になりました。

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //グーグルドライブにファイル作成 Button btn2=(Button)findViewById(R.id.button2); btn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ResultCallback<DriveApi.DriveContentsResult> newDriveContentsCallback = new ResultCallback<DriveApi.DriveContentsResult>() { @Override public void onResult(DriveApi.DriveContentsResult result) { // MimeType は適宜変更する。他にも必要な項目があれば set 関数で set する。 // setTitle で初期タイトルくらいは決めてあげると良さそう MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder() .setMimeType("text/plain").build(); DriveContents contents = result.getDriveContents(); // OutputStream を取得して初期データを書き込む。例として、適当な文字列を書き込む。 try { OutputStream os = contents.getOutputStream(); String hello = "Hello World!"; os.write(hello.getBytes()); os.close(); } catch (Exception e){ Log.e(LOGTAG, e.toString()); } // デフォルトで用意された UI を表示 IntentSender intentSender = Drive.DriveApi .newCreateFileActivityBuilder() .setInitialMetadata(metadataChangeSet) .setInitialDriveContents(contents) .build(mGoogleApiClient); try { startIntentSenderForResult( intentSender, REQUEST_CODE_CREATOR, null, 0, 0, 0); } catch (IntentSender.SendIntentException e) { Log.w(LOGTAG, "Unable to send intent", e); } } }; Drive.DriveApi.newDriveContents(mGoogleApiClient).setResultCallback(newDriveContentsCallback); } }); //選択したファイルを読み込みボタン Button btn3=(Button)findViewById(R.id.button3); btn3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {IntentSender intentSender = Drive.DriveApi .newOpenFileActivityBuilder() .setMimeType(new String[] { "text/plain" }) .build(mGoogleApiClient); try { startIntentSenderForResult( intentSender, REQUEST_CODE_OPENER, null, 0, 0, 0); } catch (IntentSender.SendIntentException e) { Log.w(LOGTAG, "Unable to send intent", e); } } }); //実機が使用するアカウントの選択とグーグルドライブへの接続 mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle bundle) { Log.i(LOGTAG, "onConnected"); } @Override public void onConnectionSuspended(int i) { Log.i(LOGTAG, "onConnectionSuspended:" + i); } }) .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.i(LOGTAG, "onConnectionFailed:" + connectionResult.toString()); if(connectionResult.hasResolution()) { try { // 初回起動時などで未認証の場合などはこちらにきます connectionResult.startResolutionForResult(MainActivity.this, GOOGLE_API_CLIENT_RESOLUTION); } catch (Exception e) { Log.e(LOGTAG, e.toString()); } } else{ Log.e(LOGTAG, "hasNoResolution()"); int errorCode = connectionResult.getErrorCode(); Log.e(LOGTAG, "hasNoResolution() errorCode"+errorCode); /* Dialog dialog = GooglePlayServicesUtil.errorCode, MainActivity.this, GOOGLE_API_CLIENT_ERROR); if( dialog != null){ dialog.show(); } else { Log.e(LOGTAG, "no dialog"); }*/ } } }) .addApi(Drive.API).addScope(Drive.SCOPE_FILE) .build(); mGoogleApiClient.connect(); } @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { if(requestCode == GOOGLE_API_CLIENT_RESOLUTION){ switch (resultCode) { case Activity.RESULT_OK: mGoogleApiClient.connect(); break; default: Log.e(LOGTAG, "" + resultCode); } } //ファイル作成ダイアログから復帰 if(requestCode == REQUEST_CODE_CREATOR){ Log.i(LOGTAG,"REQUEST_CODE_CREATOR:" + resultCode); if(resultCode == RESULT_OK) { DriveId driveId = data.getParcelableExtra(CreateFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID); Log.i(LOGTAG, "Drive Id:" + driveId.toString()); } } //ファイル読み込みダイアログから復帰 if(requestCode == REQUEST_CODE_OPENER){ if(resultCode == RESULT_OK){ DriveId driveId = data.getParcelableExtra( OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID); // 取得した driveId からファイルの内容を取得。 // プログレスを取得して何か行う場合は file.open の第三引数にリスナーを設定する。 DriveFile file =driveId.asDriveFile(); file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() { @Override public void onResult(DriveApi.DriveContentsResult driveContentsResult) { if(driveContentsResult.getStatus().isSuccess()){ DriveContents driveContents = driveContentsResult.getDriveContents(); // DriveContents の getInputStream で内容を取得する。 // 以下はファイルの内容がテキストであることを想定した例。 BufferedReader reader = new BufferedReader( new InputStreamReader(driveContents.getInputStream())); StringBuilder builder = new StringBuilder(); String contents = null; String line; try { while ((line = reader.readLine()) != null) { builder.append(line); } contents = builder.toString(); } catch (IOException e) { Log.e(LOGTAG, "IOException while reading from the stream", e); } // 読み込むだけで内容に変更はなし。discard を呼んで閉じておく(意味は無いかも?) driveContents.discard(mGoogleApiClient); Toast.makeText(MainActivity.this, contents, Toast.LENGTH_LONG).show(); } } }); } } } }

投稿2017/09/18 04:27

kbys32

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問