丈夫志四海,万里犹比邻。这篇文章主要讲述使用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
{
DriveFolderparent= 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:
我承认我不熟悉
Tasks
,Continutation
s,continueWithTask
和addOnSuccessListener
。为什么我没有看到列出的其他文件?
在检索完所有文件后调用
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让用户选择他们授权访问的文件。
有一个长期存在的功能请求允许在文件夹级别进行授权,但到目前为止该功能尚未实现。
【使用Android应用无法在Google云端硬盘上看到PC上传的文件】当然,您始终可以使用具有完整驱动器范围的REST API。出于安全原因,不鼓励使用完整范围 - 应用很少需要访问用户拥有的所有文件。您还会放弃Android版API的一些更好的功能(例如离线支持)
推荐阅读
- 如何在没有app包限制的情况下使用map v2 api key()
- 拒绝访问路径'path-name'(Xamarin.Android)
- MVC中的“/.well-known/apple-app-site-association”错误
- 为什么使用sys.path.append(path)而不是sys.path.insert(1,path)()
- Android Studio不兼容的类型
- 在Android上的蓝牙中从InputStream读取数据时出错
- ScanCall回来没有进入Android Oreo
- 如何使用WinForms上的C#识别(检测和命名)安装在PC上的防病毒软件
- 如何在PHP中创建数字的缩写