使用Android应用无法在Google云端硬盘上看到PC上传的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Android应用无法在Google云端硬盘上看到PC上传的文件相关的知识,希望对你有一定的参考价值。

我正在尝试使用以下代码列出我的Google云端硬盘帐户的根目录。

不幸的是,它只向我显示了一个文件,该文件是由我的应用程序创建和删除的。我在根文件夹中有多个文件已经存在了几个月,所以它们应该是可见的(我在我的应用程序上使用相同的帐户登录)。

这是我正在使用的代码:

// Get currently signed in account (or null)
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount( this );

// Synchronously check for necessary permissions
if( ! GoogleSignIn.hasPermissions( account, Drive.SCOPE_FILE ) )
{
  // Note: this launches a sign-in flow, however the code to detect the result of the sign-in flow and retry the API call is not shown here.
  GoogleSignIn.requestPermissions( this, RC_DRIVE_PERMS, account, Drive.SCOPE_FILE );
  return;
}

client = Drive.getDriveResourceClient( this, account );

// Start task - to get the root folder and contents..
rootFolderTask = client.getRootFolder();

Tasks.whenAll( rootFolderTask ).continueWithTask( new Continuation<Void, Task<MetadataBuffer> >()
{
  @Override
  public Task<MetadataBuffer> then( @NonNull Task<Void> task ) throws Exception
  {
    DriveFolder   parent       = rootFolderTask.getResult();

    listChildrenTask = client.listChildren( parent );

    return listChildrenTask;
  }
} )
.addOnSuccessListener( this,
        new OnSuccessListener<MetadataBuffer>()
        {
          @Override
          public void onSuccess( MetadataBuffer list )
          {
            Log.i( TAG, "Got child list Success(A)" );

            int nNumItems = list.getCount();

            Log.i( TAG, "Got " + nNumItems + " items" );

            for( int i = 0; i < nNumItems; i ++ )
            {
              Metadata md = list.get( i );

              Log.i( TAG, i + " getDriveId: " + md.getDriveId() );
              Log.i( TAG, i + " getTitle: " + md.getTitle() );
              Log.i( TAG, i + " isFolder: " + md.isFolder() );
              Log.i( TAG, i + " isTrashed: " + md.isTrashed() );
              Log.i( TAG, i + " getFileSize: " + md.getFileSize() );
              Log.i( TAG, i + " getFileExtension: " + md.getFileExtension() );
            }

            //showMessage( getString( R.string.file_created,
            //      driveFile.getDriveId().encodeToString() ) );
            //finish();
            list.release();
          }
        } )

我的Logcat输出:

01-05 14:27:24.150 17248-17248/org.libsdl.app I/PDS: Got child list Success(A)
01-05 14:27:24.150 17248-17248/org.libsdl.app I/PDS: Got 1 items
01-05 14:27:24.155 17248-17248/org.libsdl.app I/PDS: 0 getDriveId: DriveId:CAESITFwaGZ2TDhYM2UwWndpRXJ2elRwSG41Z3VWOFRqQW8zXxh-IPyMkcvdUigA
01-05 14:27:24.155 17248-17248/org.libsdl.app I/PDS: 0 getTitle: abhaytest2
01-05 14:27:24.155 17248-17248/org.libsdl.app I/PDS: 0 isFolder: false
01-05 14:27:24.155 17248-17248/org.libsdl.app I/PDS: 0 isTrashed: true
01-05 14:27:24.155 17248-17248/org.libsdl.app I/PDS: 0 getFileSize: 12
01-05 14:27:24.155 17248-17248/org.libsdl.app I/PDS: 0 getFileExtension: 

我承认我不熟悉TasksContinutations,continueWithTaskaddOnSuccessListener

为什么我没有看到列出的其他文件?

在检索完所有文件后调用addOnSuccessListener(),还是仅在第一个文件上调用一次(即。我应该使用continueWith吗?)

更新:如果我使用continueWith而不是addOnSuccessListener,我会得到相同的结果。

更新:唉! Google API文档说明了查询文件的以下内容:

注意:android Drive API仅适用于https://www.googleapis.com/auth/drive.file范围。这意味着只有用户使用您的应用程序打开或创建的文件才能与查询匹配。

和..

“一个范围,它为用户的驱动器提供'drive.file'访问权限。这个范围允许每个文件访问由应用程序创建或专门打开的文件。”

看起来我的应用程序可能不被允许打开它自己没有创建的文件?当然这不是真的 - 这将阻止我拥有一个可以共享文件的Windows应用程序和Android移动应用程序。

也许我应该使用'app'文件夹? (例如getAppFolder()

但是 - 我无法使用'app'文件夹,因为Google声明:

“app文件夹是Drive中的一个特殊文件夹,只能由您的应用程序访问。其内容对用户和其他应用程序是隐藏的。虽然它对用户隐藏,但app文件夹确实会计入用户的Drive存储配额。 “

必须有一种方法来创建一个应用程序和用户都可以看到的共享文件夹?也许Google Drive不能(目前)用于在Windows和Android应用程序之间共享文件 - 也许我需要使用DropBox或其他东西?

我的Google云端硬盘有一个打开方式 - >连接更多应用菜单选项。这似乎让用户选择哪个应用可以查看文件夹/文件。

如何连接开发/调试应用程序,以便在尚未在Play商店中发布时查看文件夹的内容?

答案

您的帖子中有多个问题,但简短的回答是您可以看到未使用该应用创建的文件。问题是用户必须选择允许的文件。您可以使用newOpenFileActivityIntentSender让用户选择他们授权访问的文件。

有一个长期存在的功能请求允许在文件夹级别进行授权,但到目前为止该功能尚未实现。

当然,您始终可以使用具有完整驱动器范围的REST API。出于安全原因,不鼓励使用完整范围 - 应用很少需要访问用户拥有的所有文件。您还会放弃Android版API的一些更好的功能(例如离线支持)

以上是关于使用Android应用无法在Google云端硬盘上看到PC上传的文件的主要内容,如果未能解决你的问题,请参考以下文章

继续在Android上使用旧的Google云端硬盘API

列出来自Google云端硬盘的文件,并获取Android中所选文件的downloadUrl

您可以将视频从Android流式传输到Google云端硬盘吗? [关闭]

未找到 Google 云端硬盘页面 - 抱歉,目前无法打开文件

Google云端硬盘管理应用中缺少应用图标

Google云端硬盘访问 - 服务帐户或OAuth - 读取/写入用户文件