いくつかのフォルダを作成し、ユーザーのためにいくつかのデータを含むテキストファイルをアップロードするためにDriveApiを使用しようとしています。GoogleApiClient onConnectedコールバックが正しく呼び出されない
私は(link)からのクイックスタートガイドを実装しようとしましたが、それはいくつかの基本的な問題があります:APIはonResume
で接続されますので、ユーザがアクセス権を与えることを促されます
- をアプリを開いた直後にアプリが混乱して恐ろしいです。
- 同意画面で戻るボタンを拒否または押すと、
onResume
メソッドが再度呼び出され、同意画面がもう一度表示され、無限ループにつながります。
ユーザーが実際にデータを格納する必要がある場合、私はむしろユーザーにもっと理解しやすいようにしたいと考えています。私は、ユーザーが時にAPI実行しようとしました何の参照を維持することを期待していた
@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();
mDriveHelper = new DriveApiHelper(mGoogleApiClient);
}
//Log.d(TAG, mDriveHelper.getCurrentAction() + "");
Log.d("test", "Connected " + mGoogleApiClient.isConnected());
}
@Override
public void onConnected(Bundle connectionHint) {
Log.i(TAG, "API client connected.");
switch (mDriveHelper.getCurrentAction()) { //resume the last action
case CREATING_FOLDER:
mDriveHelper.createBackupsFolder();
break;
}
}
:私はこのようにそれをやってみました:
ResultCallback<DriveFolder.DriveFolderResult> folderCreatedCallback = new
ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult result) {
clearCurrentAction();
if (!result.getStatus().isSuccess()) {
Log.e(TAG, "Error while trying to create the folder");
return;
}
Log.d(TAG, "Created a folder: " + result.getDriveFolder().getDriveId());
}
};
public DriveApiHelper(GoogleApiClient mGoogleApiClient) {
this.mGoogleApiClient = mGoogleApiClient;
}
public void createBackupsFolder() {
currentAction = DriveActions.CREATING_FOLDER;
if (mGoogleApiClient.isConnected()) {
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("test").build();
Drive.DriveApi.getRootFolder(mGoogleApiClient).createFolder(
mGoogleApiClient, changeSet).setResultCallback(folderCreatedCallback);
} else {
mGoogleApiClient.connect();
}
}
、これが私のonResume
とonConnected
方法がどのように見えるかです接続するように頼まれた、私はAPIに正常に接続した後、そのアクションを再開することができます。これは私のニーズに合った最も近い実装ですが、実際に同意画面から「許可」ボタンをクリックした後でも、APIコールバックは呼び出されません(onConnected
,)。
実際に接続するにはもう一度connectメソッドを呼び出し、onConnected
はユーザーの操作を正常に再開する必要があります。
あなたは解決策を手に入れましたか? – SimpleCoder
@SimpleCoder 私が覚えているように、私は 'onActivityResult'をオーバーライドしていませんでした。 –