gpt4 book ai didi

google-drive-api - 谷歌云端硬盘 SDK : Drive QuickStart App example doesn't work on Android

转载 作者:行者123 更新时间:2023-12-01 05:22:26 24 4
gpt4 key购买 nike

Drive QuickStart 应用示例不适用于 Android (https://developers.google.com/drive/quickstart-android)。

我有一台运行 Android 4.1.2 的 Note 2。我遵循了教程中的所有步骤(使用 eclipse + ADT + google 控制台)并花费了 30 多个小时。

以下行中有一个“ClassNotFoundException”:文件 file = service.files().insert(body, mediaContent).execute();

我发现异常发生在Drive.Files.Insert.execute()部分。

有没有人能让这个相机应用程序正常工作?我看了这个应用程序的视频教程,甚至开发者都说这个应用程序只是“可能会起作用”......

互联网上是否有经确认有效的 Drive SDK 应用程序?我只想从谷歌驱动器下载一个简单的谷歌电子表格。

我尝试过的其他事情:- Google 提供的 DrEdit 示例应用程序也无法与 Google Drive 正确同步。- 我在 Google 文档列表 API 网站上也找不到可用的示例应用程序。

我相信从 Android 访问 Google Drive 应该是一个简单的任务,附带一个示例...否则,人们还不如使用 DropBox。

谢谢!

最佳答案

当我在寻找如何从 Drive 打开单个电子表格时,我使用了相同的 QuickStart 应用程序,并且我使用的是 Eclipse Juno、Windows 7、64 位。我看了两个视频,第二个是 Integerate with the Android Drive App

我使用了两者中的步骤,尤其是在我的 list xml 中。我不得不两次观看视频以确保我掌握了所有步骤。我必须将用户功能添加到我的 list 中。

 <uses-feature android:name="android.hardware.camera" />

我还发现了其他一些东西。我根本无法在模拟器上运行它。在 Debug模式下在手机上运行它最初也不起作用,它可以访问手机的 SD 卡(很明显)。我将 APK 复制到手机上并安装了它,确保您的安全设置是宽松的。当没有通过 ADB 绑定(bind)时,它可以在我的手机 (Jellybean Droid Razr) 上运行。

这是我的大部分 list 。请注意,您必须从 API 控制台将“YOURCLIENTID”替换为您的。我只使用了第一组数字,“-”之后什么也没有,即 123456789-blah,blah。只是 123456789。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.birdsall.tda"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.camera" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:uiOptions="splitActionBarWhenNarrow"
android:exported="true" >

<meta-data android:name="com.google.android.apps.drive.APP_ID" android:value="id=YOURCLIENTID" />

<intent-filter>
<action android:name="com.google.android.apps.drive.DRIVE_OPEN" />
<data android:mimeType="application/vnd.google-apps.drive-sdk.YOURCLIENTID" />
<data android:mimeType="image/png" />
<data android:mimeType="image/jpeg" />
<data android:mimeType="image/jpg" />
</intent-filter>

<meta-data
android:name="android.app.default_searchable"
android:value=".ActivitySearch" />

<activity
android:name="com.birdsall.tda.ActivityMain"
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=".ActivityTakePhoto" >
</activity>


<provider
android:name="com.birdsall.tda.TDAProvider"
android:authorities="com.birdsall.tda.contentprovidertda"
android:exported="true"
android:readPermission="true"
android:writePermission="true" />

<activity
android:name=".ActivitySearch"
android:label="Rule Search"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />

<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
</application>

</manifest>

我想我只更改了事件的类名,否则我不必更改任何 java 代码。这是我的事件:

package com.birdsall.tda;


import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import android.accounts.AccountManager;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.widget.Toast;

import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential;
import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException;
import com.google.api.client.http.FileContent;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;

public class ActivityTakePhoto extends Activity {
static final int REQUEST_ACCOUNT_PICKER = 1;
static final int REQUEST_AUTHORIZATION = 2;
static final int CAPTURE_IMAGE = 3;

private static Uri fileUri;
private static Drive service;
private GoogleAccountCredential credential;

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

credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);
startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
}

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
switch (requestCode) {
case REQUEST_ACCOUNT_PICKER:
if (resultCode == RESULT_OK && data != null && data.getExtras() != null) {
String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
if (accountName != null) {
credential.setSelectedAccountName(accountName);
service = getDriveService(credential);
startCameraIntent();
}
}
break;
case REQUEST_AUTHORIZATION:
if (resultCode == Activity.RESULT_OK) {
saveFileToDrive();
} else {
startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
}
break;
case CAPTURE_IMAGE:
if (resultCode == Activity.RESULT_OK) {
saveFileToDrive();
}
}
}

private void startCameraIntent() {
String mediaStorageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).getPath();
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date());
fileUri = Uri.fromFile(new java.io.File(mediaStorageDir + java.io.File.separator + "BCM_IMG_"
+ timeStamp + ".jpg"));

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(cameraIntent, CAPTURE_IMAGE);
}

private void saveFileToDrive() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
// File's binary content
java.io.File fileContent = new java.io.File(fileUri.getPath());
FileContent mediaContent = new FileContent("image/jpeg", fileContent);

// File's metadata.
File body = new File();
body.setTitle(fileContent.getName());
body.setMimeType("image/jpeg");

File file = service.files().insert(body, mediaContent).execute();
if (file != null) {
showToast("Photo uploaded: " + file.getTitle());
startCameraIntent();
}
} catch (UserRecoverableAuthIOException e) {
startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
} catch (IOException e) {
e.printStackTrace();
}
}
});
t.start();
}

private Drive getDriveService(GoogleAccountCredential credential) {
return new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential)
.build();
}

public void showToast(final String toast) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), toast, Toast.LENGTH_LONG).show();
}
});
}
}

希望这对您有所帮助。

关于google-drive-api - 谷歌云端硬盘 SDK : Drive QuickStart App example doesn't work on Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15790750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com