有没有办法在Android应用程序中启动谷歌驱动器的文件选择器 - 做类似于这个http://googleappsdeveloper.blogspot.com/2012/08/allowing-user-to-select-google-drive.html.我需要允许用户从谷歌驱动器中选择文件,所以我可以在我的应用程序中使用它们的字节.谢谢.
android filepicker google-drive-api google-drive-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应用查询将无法找到他们.它表现得像我期望的那样:
使用新的GDAA,它似乎不起作用.这让我想到了第二点:
DELETE/TRASH功能.
我试图测试CRUD功能,根本找不到DELETE(再次,它可能是我的无知/短视).从"drive.google.com"中删除它们会让它们在那里隐身,但Android应用仍会看到它们.元数据可以查询"isTrashed()",但"MetadataChangeSet.Builder"中没有任何内容可以让我删除/删除它们,只有setMimeType(),setStarred(),setTitle().
我迷路了,请帮忙.
我想将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
我正在努力让我的代码工作.
我希望我的应用程序(单击按钮时)显示驱动器根文件夹中的所有文件夹(和文件).但似乎这是不可能的,因为即使我使用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
我正在滥用这个论坛来征求GDAA通知功能的预期用途的解释(来自GDAA支持团队).这里的文档足以实现它,并且两个相关的SO问题22980497和22778501涉及相同的主题.但我无法理解它的用途.这是一个例子.
那么,有什么好处呢?某个特定设备上的应用程序知道它只是修改了一个对象,不需要通知.另一方面,如果它通知另一个设备修改了具有CONSIDERABLE(分钟)延迟的对象,那么如何实现同步呢?或者如何使用呢?我被建议使用'requestSync()',但没有看到任何差异(此外,它与直接轮询有何不同).
今天,我可以通过轮询可靠地同步多个设备,但无法使其与未按时通知的通知一起使用.
我正在编写一个应用程序,将图像存储在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中使用缓存(网络(上面的方法),磁盘,内存)的完全支持.
我希望我的应用能够从预定义的共享公共Google云端硬盘文件夹中读取,而无需用户登录或选择Google帐户.
使用我的桌面浏览器,我在Google云端硬盘上创建了一个公共文件夹,该文件夹设置为公开.有链接的任何人都可以访问(读取)驱动器,因此无需授权:
在我的Android Studio项目中,我已经进入File > Project Structure > Dependencies并添加了com.google.android.gms:play-services-drive:10.2.0
我现在有能力创建一个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
我正在创建一个应用程序,我正在将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
我正在尝试将我的应用程序连接到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
我正在使用此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