标签: google-drive-android-api

如何从Android中的谷歌驱动器中选择文件?

有没有办法在Android应用程序中启动谷歌驱动器的文件选择器 - 做类似于这个http://googleappsdeveloper.blogspot.com/2012/08/allowing-user-to-select-google-drive.html.我需要允许用户从谷歌驱动器中选择文件,所以我可以在我的应用程序中使用它们的字节.谢谢.

android filepicker google-drive-api google-drive-android-api

6
推荐指数
2
解决办法
5710
查看次数

垃圾邮件,删除新的Google云端硬盘Android API?

更新(2015年5月):
"垃圾"功能已在GDAA中实施,使下面的问题无关紧要.

原始问题:
当我使用新的"Google Drive Android API"(GDAA)时,我遇到了一些我无法弄清楚的差异.基本上,我有一个使用"com.google.api.services.drive"界面(插入,补丁,更新)的旧应用程序,我很乐意将其移植到GDAA.

首先,GDAA与drive.google.com网络应用.
使用旧服务,我使用了DriveScopes.DRIVE_FILE范围,因此我假设了类似的行为/结果.使用旧的"DriveScopes.DRIVE_FILE"创建的文件可以由我("驱动程序所有者")在" https://drive.google.com "中删除(我假设我的范围是DRIVE那里),后续的Android应用查询将无法找到他们.它表现得像我期望的那样:

  1. Android应用创建文件.
  2. 用户在"drive.google.com"上删除它们.
  3. Android应用程序不再看到它们了.

使用新的GDAA,它似乎不起作用.这让我想到了第二点:

DELETE/TRASH功能.
我试图测试CRUD功能,根本找不到DELETE(再次,它可能是我的无知/短视).从"drive.google.com"中删除它们会让它们在那里隐身,但Android应用仍会看到它们.元数据可以查询"isTrashed()",但"MetadataChangeSet.Builder"中没有任何内容可以让我删除/删除它们,只有setMimeType(),setStarred(),setTitle().

我迷路了,请帮忙.

google-drive-api google-drive-android-api

6
推荐指数
2
解决办法
5060
查看次数

在google drive android中的文件夹中创建一个文件夹

我想将Google云端硬盘与我在Google Developers Console中注册我的应用的应用集成.我从https://github.com/googledrive/android-demos获得了一个示例.通过这个我可以在Google驱动器的根文件夹中创建一个文件,文件夹,但问题是我无法在其中创建文件或文件夹现有文件夹.在这种情况下,我得到一个祝酒词"找不到DriveId.您是否有权查看此文件?" 即我无法获得driveID

public class CreateFolderInFolderActivity extends BaseDemoActivity {

@Override
public void onConnected(Bundle connectionHint) {
    super.onConnected(connectionHint);
    Drive.DriveApi.fetchDriveId(getGoogleApiClient(), EXISTING_FOLDER_ID)
            .setResultCallback(idCallback);
}

final ResultCallback<DriveIdResult> idCallback = new ResultCallback<DriveIdResult>() {
    @Override
    public void onResult(DriveIdResult result) {
        if (!result.getStatus().isSuccess()) {
             showMessage(result.getStatus().toString());
            showMessage("Cannot find DriveId. Are you authorized to view this file?");
            return;
        }
        DriveFolder folder = Drive.DriveApi
                .getFolder(getGoogleApiClient(), result.getDriveId());
        MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                .setTitle("MyNewFolder").build();
        folder.createFolder(getGoogleApiClient(), changeSet)
                .setResultCallback(createFolderCallback);
    }
};

final ResultCallback<DriveFolderResult> createFolderCallback = new
        ResultCallback<DriveFolderResult>() {

    @Override
    public void onResult(DriveFolderResult …
Run Code Online (Sandbox Code Playgroud)

android google-api google-drive-api google-drive-android-api

6
推荐指数
1
解决办法
2381
查看次数

Android Google Drive SDK - 如何显示所选文件夹中的文件列表

我正在努力让我的代码工作.

我希望我的应用程序(单击按钮时)显示驱动器根文件夹中的所有文件夹(和文件).但似乎这是不可能的,因为即使我使用Ouath2授权应用程序,该应用程序只能访问用户选择的文件和文件夹.

这种行为很奇怪,当文件夹选择器打开时,如果内容为ARE文件夹,它只列出该文件夹的内容.它根本不会列出任何文件.

请专家看看我的代码并告诉我哪里出错了?

我正在使用该PickFolderWithOpener活动,以获取driveId.它根据选择器中的用户选择返回一个driveID.

 DriveId driveId = (DriveId) data.getParcelableExtra(
                            OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);
Run Code Online (Sandbox Code Playgroud)

这是在这里返回的文件夹Drive ID?然后我需要调用意图ListFilesInFolderActivity.我假设我必须在意图调用中传递此driveID?如果我将DriveID格式化为字符串并将其传递,则会失败,并显示"无法找到DriveId.您是否有权查看此文件?" 信息.

所以我正在做的是传递ResourceID.

Intent intent = new Intent(this, ListFilesInFolderActivity.class);
                    intent.putExtra("DriveID", driveId.getResourceId());
                    startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

需要在ListFilesInFolderActivity? DriveID或resourceID中使用什么?这就是我所拥有的ListFilesInFolderActivity?

Bundle extras = getIntent().getExtras();
        folderId= extras.getString("DriveID"); // this is the resourceID
Drive.DriveApi.fetchDriveId(getGoogleApiClient(), folderId)
                .setResultCallback(idCallback);


final private ResultCallback<DriveIdResult> idCallback = new ResultCallback<DriveIdResult>() {
@Override
public void onResult(DriveIdResult result) {
    if (!result.getStatus().isSuccess()) {
        showMessage("Cannot find DriveId. Are you authorized to view this file?");
        return;
    }
    DriveFolder folder = Drive.DriveApi.getFolder(getGoogleApiClient(), result.getDriveId()); …
Run Code Online (Sandbox Code Playgroud)

android google-api google-drive-api google-drive-android-api

6
推荐指数
1
解决办法
2103
查看次数

Google云端硬盘Android Api ChangeEvent侦听器工作方式

我正在滥用这个论坛来征求GDAA通知功能的预期用途的解释(来自GDAA支持团队).这里的文档足以实现它,并且两个相关的SO问题2298049722778501涉及相同的主题.但我无法理解它的用途.这是一个例子.

  • 设备A'触摸'Drive对象并立即获得通知.
  • 设备B'触摸'相同的Drive对象,并且设备A在" 稍后某个时间 " 得到通知,即使两个设备都在wifi上.

那么,有什么好处呢?某个特定设备上的应用程序知道它只是修改了一个对象,不需要通知.另一方面,如果它通知另一个设备修改了具有CONSIDERABLE(分钟)延迟的对象,那么如何实现同步呢?或者如何使用呢?我被建议使用'requestSync()',但没有看到任何差异(此外,它与直接轮询有何不同).
今天,我可以通过轮询可靠地同步多个设备,但无法使其与未按时通知的通知一起使用.

google-drive-android-api

6
推荐指数
0
解决办法
410
查看次数

如何在Android上将Google云端硬盘与Picasso集成?

我正在编写一个应用程序,将图像存储在Google云端硬盘中,我想显示那些(GridView)的图库.为了更高效(即异步)我想整合它Picasso.但这Picasso.load(String)只是一个别名load(Uri.parse(path)),我没有,Uri因为图像是这样加载的(简化和未公开的实用方法):

public static Bitmap getBitmap(DriveId id) {
    GoogleApiClient client = ApiClientAsyncTask.createConnectedClient(App.getAppContext());
    DriveFile file = Drive.DriveApi.getFile(client, id);
    Metadata meta = sync(file.getMetadata(client));
    Contents contents = sync(file.openContents(client, DriveFile.MODE_READ_ONLY, null));
    InputStream imageStream = contents.getInputStream();
    try {
        return BitmapFactory.decodeStream(imageStream);
    } finally {
        IOTools.ignorantClose(imageStream);
        sync(file.discardContents(client, contents));
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何其他类似的库可能支持任意输入(String/Object)的集成?

当然我想在Picasso中使用缓存(网络(上面的方法),磁盘,内存)的完全支持.

android caching picasso google-drive-android-api

6
推荐指数
2
解决办法
1873
查看次数

从Android应用访问公共Google云端硬盘文件夹,无需进行身份验证

我希望我的应用能够从预定义的共享公共Google云端硬盘文件夹中读取,而无需用户登录或选择Google帐户.

背景/环境

使用我的桌面浏览器,我在Google云端硬盘上创建了一个公共文件夹,该文件夹设置为公开.有链接的任何人都可以访问(读取)驱动器,因此无需授权:

共享Google云端硬盘文件夹的桌面截屏

在我的Android Studio项目中,我已经进入File > Project Structure > Dependencies并添加了com.google.android.gms:play-services-drive:10.2.0

Google Play服务的Android Studio图片作为模块依赖项

我现在有能力创建一个new GoogleApiClient.Builder().

我查看了各种示例,但在大多数情况下,驱动程序是由Android应用程序创建的.这不是我想要管理的情况.

此问题是关于访问已使用"文件夹ID"公开的驱动器,或者0B6X74x23H....在最初共享和公开文件夹时分配的任何内容.

我已经检查了Google提供演示代码,但据推测,这不是公共文件夹,因为它说:

...需要注册OAuth 2.0客户端

至少,我可以使用http-client来驱动这个过程,在https://drive.google.com/drive/folders/0B6X74x23Hx7DNE13M0ZIbVI....?usp=sharing没有身份验证的情况下进入共享链接,而不需要跳过箍.但是,当然使用已定义的API并简单地指定公共共享文件夹以列出内容并且如果需要,从公共文件夹下载文件将更加清晰.

当我尝试这段代码时:

        Scope publicFolder = new Scope(EXISTING_FOLDER_ID);
        mGoogleApiClient = new GoogleApiClient.Builder(mActivity)
                .addApi(Drive.API)
                .addScope(publicFolder)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
        mGoogleApiClient.connect();
Run Code Online (Sandbox Code Playgroud)

这种方法触发:

GoogleApiClient.OnConnectionFailedListener.onConnectionFailed()

结果包含statusCode=SIGN_IN_REQUIRED.但当然,对于公开的文件夹,不需要登录.

android public-folders google-api-client google-drive-api google-drive-android-api

6
推荐指数
1
解决办法
641
查看次数

Google Drive Android API ConnectionResult错误

我正在创建一个应用程序,我正在将Google Drive Android API集成到其中.我有一个主要活动,然后打开一个片段,导致谷歌驱动器.但是,当我尝试登录时(无论是什么gmail帐户,我都尝试过现有的,创建新的,无论如何)我得到ConnectionResult错误代码17 SIGN_IN_FAILED.该应用已在开发者控制台中获得授权,并且已启用Drive API.我不知道还能做什么.

这是相关代码:

public class FileSharingFragment extends Fragment implements
    GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (mGoogleApiClient == null) {
            mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
                .addApi(Drive.API)
                .addScope(Drive.SCOPE_FILE)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
        }
        mGoogleApiClient.connect();
    }

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_file_sharing, container, false);
    users = (TextView) rootView.findViewById(R.id.users);
    getActivity().setTitle("Files");
    return rootView;
}

    @Override
public void onActivityResult(int requestCode, int resultCode,
                                Intent data) …
Run Code Online (Sandbox Code Playgroud)

android google-drive-api android-studio google-drive-android-api

5
推荐指数
1
解决办法
1338
查看次数

GoogleApiClient onConnectionFailed,statusCode = SIGN_IN_REQUIRED

我正在尝试将我的应用程序连接到Google Play服务以访问Google云端硬盘,但它显示我与statusCode的连接失败SIGN_IN_REQUIRED.

但它似乎就在3天前表现得那样.我也检查了谷歌的开发者控制台.他们可能在API中改变了一些我无法弄清楚的东西.欢迎您的帮助.

我的代码:

/**
 * Create a new file and save it to Drive.
 */
    private void saveFileToDrive(final byte[] data) {
    // Start by creating a new contents, and setting a callback.
    Log.i(TAG, "Creating new contents.");
    //final Bitmap image = mBitmapToSave;
    Drive.DriveApi.newDriveContents(mGoogleApiClient)
            .setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() {

                @Override
                public void onResult(DriveApi.DriveContentsResult result) {
                    // If the operation was not successful, we cannot do anything
                    // and must
                    // fail.
                    if (!result.getStatus().isSuccess()) {
                        Log.i(TAG, "Failed to create new contents.");
                        return; …
Run Code Online (Sandbox Code Playgroud)

android google-api google-api-client google-drive-android-api android-googleapiclient

5
推荐指数
1
解决办法
6839
查看次数

Google Drive Auth始终返回0

我正在使用此https://developers.google.com/drive/android/auth#connecting_and_authorizing_the_google_drive_android_api中显示的代码

在我的应用程序中,我单击以连接到驱动器,但它导致此行正在执行

 connectionResult.startResolutionForResult(this, 1);
Run Code Online (Sandbox Code Playgroud)

由于连接失败.

然后它会打开一个帐户菜单供我选择帐户.当我点击它然后对话框解除,我仍然无法连接到谷歌驱动器,因为每次结果代码为0

protected void onActivityResult(final int requestCode, final int resultCode,      final Intent data) {
    switch (requestCode) {
        case 1:
            if (resultCode == RESULT_OK) {
                mGoogleApiClient.connect();
           }
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我会假设代码是正确的,但有人知道我需要做什么来防止取消?我相信我为OA Auth正确设置了我的凭据

google-drive-api google-play-services google-drive-android-api

5
推荐指数
1
解决办法
440
查看次数