android - 登录指定帐户时出错。请选择其他帐户

标签 android google-drive-api

我试图与谷歌驱动器建立连接并将所有文件选择到列表 Activity 中。我已经使用谷歌教程和解决方案步骤成功完成了。 为了大家更统一的引用,通知大家我主要是按照下面的链接: https://github.com/googledrive/android-demos 使用“BaseDemoActivity”和“PickFileWithOpenerActivity”类,应用程序在开发环境中运行良好。毕竟一切正常,我已将应用程序制作为 apk 文件。当我试图将该 apk 运行到另一台设备或同一台设备时,它会向我提供消息,“登录指定帐户时出错。请选择其他帐户。”有时它会提供不同的消息,例如:“Google Play 服务的未知问题”。我真的不明白为什么我会收到这种消息,我在哪里犯了错误。但相信我,在开发环境中一切都很好。在这里,我为您提供我的完整代码,以便您更好地理解。

库:

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.drive.Drive;

BaseDemoActivity.class

public abstract class BaseDemoActivity extends Activity implements
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener {

private static final String TAG = "BaseDriveActivity";

/**
 * DriveId of an existing folder to be used as a parent folder in
 * folder operations samples.
 */
public static final String EXISTING_FOLDER_ID = "0B2EEtIjPUdX6MERsWlYxN3J6RU0";

/**
 * DriveId of an existing file to be used in file operation samples..
 */
public static final String EXISTING_FILE_ID = "0ByfSjdPVs9MZTHBmMVdSeWxaNTg";

/**
 * Extra for account name.
 */
protected static final String EXTRA_ACCOUNT_NAME = "account_name";

/**
 * Request code for auto Google Play Services error resolution.
 */
protected static final int REQUEST_CODE_RESOLUTION = 1;

/**
 * Next available request code.
 */
protected static final int NEXT_AVAILABLE_REQUEST_CODE = 2;

/**
 * Google API client.
 */
private GoogleApiClient mGoogleApiClient;

/**
 * Called when activity gets visible. A connection to Drive services need to
 * be initiated as soon as the activity is visible. Registers
 * {@code ConnectionCallbacks} and {@code OnConnectionFailedListener} on the
 * activities itself.
 */
@Override
protected void onResume() {
    super.onResume();
    if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(Drive.API)
                .addScope(Drive.SCOPE_FILE)
                .addScope(Drive.SCOPE_APPFOLDER) // required for App Folder sample
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    }
    mGoogleApiClient.connect();
}

/**
 * Handles resolution callbacks.
 */
@Override
protected void onActivityResult(int requestCode, int resultCode,
        Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == RESULT_OK) {
        mGoogleApiClient.connect();
    }
}

/**
 * Called when activity gets invisible. Connection to Drive service needs to
 * be disconnected as soon as an activity is invisible.
 */
@Override
protected void onPause() {
    if (mGoogleApiClient != null) {
        mGoogleApiClient.disconnect();
    }
    super.onPause();
}

/**
 * Called when {@code mGoogleApiClient} is connected.
 */
@Override
public void onConnected(Bundle connectionHint) {
    Log.i(TAG, "GoogleApiClient connected");
}

/**
 * Called when {@code mGoogleApiClient} is disconnected.
 */
@Override
public void onConnectionSuspended(int cause) {
    Log.i(TAG, "GoogleApiClient connection suspended");
}

/**
 * Called when {@code mGoogleApiClient} is trying to connect but failed.
 * Handle {@code result.getResolution()} if there is a resolution is
 * available.
 */
@Override
public void onConnectionFailed(ConnectionResult result) {
    Log.i(TAG, "GoogleApiClient connection failed: " + result.toString());
    if (!result.hasResolution()) {
        // show the localized error dialog.
        GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 0).show();
        return;
    }
    try {
        result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION);
    } catch (SendIntentException e) {
        Log.e(TAG, "Exception while starting resolution activity", e);
    }
}

/**
 * Shows a toast message.
 */
public void showMessage(String message) {
    Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}

/**
 * Getter for the {@code GoogleApiClient}.
 */
public GoogleApiClient getGoogleApiClient() {
  return mGoogleApiClient;
 }
}

PickFileWithOpenerActivity.class

public class PickFileWithOpenerActivity extends BaseDemoActivity {

private static final String TAG = "PickFileWithOpenerActivity";

private static final int REQUEST_CODE_OPENER = 1;

@Override
public void onConnected(Bundle connectionHint) {
    super.onConnected(connectionHint);
    IntentSender intentSender = Drive.DriveApi
            .newOpenFileActivityBuilder()
            .setMimeType(new String[] { "text/plain", "text/html" })
            .build(getGoogleApiClient());
    try {
        startIntentSenderForResult(
                intentSender, REQUEST_CODE_OPENER, null, 0, 0, 0);
    } catch (SendIntentException e) {
      Log.w(TAG, "Unable to send intent", e);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == 1 && data != null){
        switch (requestCode) {
            case REQUEST_CODE_OPENER:
                if (resultCode == RESULT_OK) {
                    DriveId driveId = (DriveId) data.getParcelableExtra(
                            OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);
                    showMessage("Selected file's ID: " + driveId);
                }
                finish();
                break;
            default:
                super.onActivityResult(requestCode, resultCode, data);
        }
    }
  }
 }

list .xml

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.googledrivetestandroidapplication" >

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

    <activity android:name="com.example.googledrivetestandroidapplication.HomeActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".PickFileWithOpenerActivity" />
</application>

注意:我已经维护了 [Google Developers Console][2],项目名称是我开发的项目名称,包名称是,

package="com.example.googledrivetestandroidapplication"

在 manifest.xml 中,在附加信息中我使用了 build.gradle。

compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.google.android.gms:play-services:7.5.0'

我也尝试过不同的方式,比如;引用自Silvana L .不幸的是,它对我不起作用。我该怎么办?

清除 Google Play 服务缓存(设置 > 应用程序管理器 > Google Play 服务 > 清除缓存)。 关闭/打开 Google Play 服务(设置 > 应用程序管理器 > Google Play 服务 > 关闭)。在此之后,您可能需要再次通过 Google Play 进行更新。 通过手机退出/登录您的 Google 帐户。

最佳答案

希望我能理解你的问题。

请按照以下步骤在 google api 控制台上注册应用:-

  1. 在 Api 控制台中创建新项目 GoogleApiConsole
  2. API & auth 选项卡中 ---> Credentials ---> 创建新的客户端 ID
  3. 选择已安装的应用程序并选择Android
  4. 在此处使用您的签名证书指纹 (SHA1) 注册您的应用程序 (com.example.googledrivetestandroidapplication)

关于android - 登录指定帐户时出错。请选择其他帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594285/

相关文章:

android - 如何使用 DriveApi 从谷歌驱动器下载选定的文件?

javascript - 谷歌驱动器 API 超出用户速率限制

javascript - 单击输入字段触发窗口调整大小

android - 可以用相机测量到物体的距离吗?

AndroidX 错误 : Both old and new data binding packages are available in dependencies. 我正在将 flutter 项目升级到 AndroidX

java - 自定义阻塞队列锁定问题

node.js - Google Drive API 下载文件nodejs

google-docs-api - Google Drive API 是否支持上传内容范围?

google-drive-api - Google Drive API - 使用 .NET 列出文件夹内的文件

android - 如何为用户选择从不的应用重新启用位置权限?