Java 谷歌驱动器未解析导入
我正在尝试编译Stephen Wylie的Google Drive集成示例代码:Java 谷歌驱动器未解析导入,java,android,google-drive-api,Java,Android,Google Drive Api,我正在尝试编译Stephen Wylie的Google Drive集成示例代码: package com.googledrive.googledriveapp; // For Google Drive / Play Services // Version 1.1 - Added new comments & removed dead code // Stephen Wylie - 10/20/2012 import android.accounts.Account; import and
package com.googledrive.googledriveapp;
// For Google Drive / Play Services
// Version 1.1 - Added new comments & removed dead code
// Stephen Wylie - 10/20/2012
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import com.google.android.gms.auth.GoogleAuthException;
import com.google.android.gms.auth.GoogleAuthUtil;
import com.google.android.gms.auth.UserRecoverableAuthException;
import com.google.android.gms.common.AccountPicker;
import com.google.api.client.auth.oauth2.BearerToken;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.android2.AndroidHttp;
import com.google.api.client.googleapis.extensions.android2.auth.GoogleAccountManager;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.json.JsonHttpRequest;
import com.google.api.client.http.json.JsonHttpRequestInitializer;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.Drive.Files;
import com.google.api.services.drive.DriveRequest;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;
public class MainActivity extends Activity {
private Button btn_drive;
private Context ctx = this;
private Activity a = this;
public void onCreate(Bundle savedInstanceState) {
/*
* Etc... (Other application logic belonging in onCreate)
*/
btn_drive.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
chooseAccount();
}
});
}
public void chooseAccount() {
Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"}, false, null, null, null, null);
startActivityForResult(intent, CHOOSE_ACCOUNT);
}
// Fetch the access token asynchronously.
void getAndUseAuthTokenInAsyncTask(Account account) {
AsyncTask<Account, String, String> task = new AsyncTask<Account, String, String>() {
ProgressDialog progressDlg;
AsyncTask<Account, String, String> me = this;
@Override
protected void onPreExecute() {
progressDlg = new ProgressDialog(ctx, ProgressDialog.STYLE_SPINNER);
progressDlg.setMax(100);
progressDlg.setTitle("Validating...");
progressDlg.setMessage("Verifying the login data you entered...\n\nThis action will time out after 10 seconds.");
progressDlg.setCancelable(false);
progressDlg.setIndeterminate(false);
progressDlg.setOnCancelListener(new android.content.DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface d) {
progressDlg.dismiss();
me.cancel(true);
}
});
progressDlg.show();
}
@Override
protected String doInBackground(Account... params) {
return getAccessToken(params[0]);
}
@Override
protected void onPostExecute(String s) {
if (s == null) {
// Wait for the extra intent
} else {
MyApp.accountName = s;
getDriveFiles();
}
progressDlg.dismiss();
}
};
task.execute(account);
}
/**
* Fetches the token from a particular Google account chosen by the user. DO NOT RUN THIS DIRECTLY. It must be run asynchronously inside an AsyncTask.
* @param activity
* @param account
* @return
*/
private String getAccessToken(Account account) {
try {
return GoogleAuthUtil.getToken(ctx, account.name, "oauth2:" + DriveScopes.DRIVE_READONLY); // IMPORTANT: DriveScopes must be changed depending on what level of access you want
} catch (UserRecoverableAuthException e) {
// Start the Approval Screen intent, if not run from an Activity, add the Intent.FLAG_ACTIVITY_NEW_TASK flag.
a.startActivityForResult(e.getIntent(), REQUEST_TOKEN);
e.printStackTrace();
return null;
} catch (GoogleAuthException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private Drive getDriveService() {
HttpTransport ht = AndroidHttp.newCompatibleTransport(); // Makes a transport compatible with both Android 2.2- and 2.3+
JacksonFactory jf = new JacksonFactory(); // You need a JSON parser to help you out with the API response
Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(MyApp.accountName);
HttpRequestFactory rf = ht.createRequestFactory(credential);
Drive.Builder b = new Drive.Builder(ht, jf, null);
b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
@Override
public void initialize(JsonHttpRequest request) throws IOException {
DriveRequest driveRequest = (DriveRequest) request;
driveRequest.setPrettyPrint(true);
driveRequest.setOauthToken(MyApp.accountName);
}
});
return b.build();
}
/**
* Obtains a list of all files on the signed-in user's Google Drive account.
*/
private void getDriveFiles() {
Drive service = getDriveService();
Log.d("SiteTrack", "FUNCTION getDriveFiles()");
Files.List request;
try {
request = service.files().list(); // .setQ("mimeType=\"text/plain\"");
} catch (IOException e) {
e.printStackTrace();
return;
}
do {
FileList files;
try {
Log.d("SiteTrack", request.toString());
files = request.execute();
} catch (IOException e) {
e.printStackTrace();
Log.d("SiteTrack", "Exception");
return;
}
List<File> fileList = files.getItems();
Log.d("SiteTrack", "Files found: " + files.getItems().size());
for (File f : fileList) {
String fileId = f.getId();
String title = f.getTitle();
Log.d("SiteTrack", "File " + fileId + ": " + title);
}
request.setPageToken(files.getNextPageToken());
} while (request.getPageToken() != null && request.getPageToken().length() >= 0);
}
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
if (requestCode == CHOOSE_ACCOUNT && resultCode == RESULT_OK) {
MyApp.accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
GoogleAccountManager gam = new GoogleAccountManager(this);
getAndUseAuthTokenInAsyncTask(gam.getAccountByName(MyApp.accountName));
Log.d("SiteTrack", "CHOOSE_ACCOUNT");
} else if (requestCode == REQUEST_TOKEN && resultCode == RESULT_OK) {
MyApp.accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
Log.d("SiteTrack", "REQUEST_TOKEN");
}
}
}
package com.googledrive.googledriveapp;
//用于谷歌驱动/播放服务
//版本1.1-添加新注释并删除死代码
//斯蒂芬·怀利-10/20/2012
导入android.accounts.Account;
导入android.accounts.AccountManager;
导入android.app.Activity;
导入com.google.android.gms.auth.GoogleAuthException;
导入com.google.android.gms.auth.GoogleAuthUtil;
导入com.google.android.gms.auth.UserRecoverableAuthException;
导入com.google.android.gms.common.AccountPicker;
导入com.google.api.client.auth.oauth2.BearerToken;
导入com.google.api.client.auth.oauth2.Credential;
导入com.google.api.client.extensions.android2.AndroidHttp;
导入com.google.api.client.googleapis.extensions.android2.auth.GoogleAccountManager;
导入com.google.api.client.http.HttpRequestFactory;
导入com.google.api.client.http.HttpTransport;
导入com.google.api.client.http.json.JsonHttpRequest;
导入com.google.api.client.http.json.JsonHttpRequestInitializer;
导入com.google.api.client.json.jackson.JacksonFactory;
导入com.google.api.services.drive.drive;
导入com.google.api.services.drive.drive.Files;
导入com.google.api.services.drive.DriveRequest;
导入com.google.api.services.drive.DriveScopes;
导入com.google.api.services.drive.model.File;
导入com.google.api.services.drive.model.FileList;
公共类MainActivity扩展了活动{
专用按钮btn_驱动器;
私有上下文ctx=这个;
私人活动a=此;
创建时的公共void(Bundle savedInstanceState){
/*
*Etc…(属于onCreate的其他应用程序逻辑)
*/
btn_drive.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
选择帐户();
}
});
}
公共无效选择帐户(){
Intent Intent=AccountPicker.newchooseaccountcontent(null,null,新字符串[]{“com.google”},false,null,null,null,null);
startActivityForResult(意向,选择账户);
}
//异步获取访问令牌。
作废getAndUseAuthTokenInAsyncTask(帐户){
AsyncTask任务=新建AsyncTask(){
ProgressDialog-progressDlg;
AsyncTask me=this;
@凌驾
受保护的void onPreExecute(){
progressDlg=新建ProgressDialog(ctx,ProgressDialog.STYLE\u微调器);
进度设定最大值(100);
progressDlg.setTitle(“验证…”);
progressDlg.setMessage(“验证您输入的登录数据…\n\n此操作将在10秒后超时”);
progressDlg.setCancelable(假);
progressDlg.SetUndeterminate(假);
progressDlg.setOnCancelListener(新的android.content.DialogInterface.OnCancelListener()版本){
公共void onCancel(对话接口d){
progressDlg.discouse();
取消(对);
}
});
progressDlg.show();
}
@凌驾
受保护的字符串doInBackground(帐户…参数){
返回getAccessToken(参数[0]);
}
@凌驾
受保护的void onPostExecute(字符串s){
如果(s==null){
//等待额外的意图
}否则{
MyApp.accountName=s;
getDriveFiles();
}
progressDlg.discouse();
}
};
任务。执行(帐户);
}
/**
*从用户选择的特定Google帐户获取令牌。不要直接运行此操作。它必须在AsyncTask中异步运行。
*@param活动
*@param帐户
*@返回
*/
私有字符串getAccessToken(帐户){
试一试{
return GoogleAuthUtil.getToken(ctx,account.name,“oauth2:+DriveScopes.DRIVE\u READONLY);//重要提示:必须根据您想要的访问级别更改DriveScopes
}捕获(UserRecoverableAuthe异常){
//启动审批屏幕意向,如果不是从活动运行,则添加intent.FLAG\u Activity\u NEW\u任务标志。
a、 startActivityForResult(例如getIntent(),请求令牌);
e、 printStackTrace();
返回null;
}捕获(googleauthe异常){
e、 printStackTrace();
返回null;
}捕获(IOE异常){
e、 printStackTrace();
返回null;
}
}
专用驱动器getDriveService(){
HttpTransport ht=AndroidHttp.newCompatibleTransport();//使传输与Android 2.2和2.3兼容+
JacksonFactory jf=new JacksonFactory();//您需要一个JSON解析器来帮助您完成API响应
凭证凭证=新凭证(BearToken.authorizationHeaderAccessMethod()).setAccessToken(MyApp.accountName);
HttpRequestFactory rf=ht.createRequestFactory(凭证);
Drive.Builder b=新的Drive.Builder(ht、jf、null);
b、 setJsonHttpRequestInitializer(新的JsonHttpRequestInitializer(){
@凌驾
公共void初始化(JsonHttpRequest请求)引发IOException{
DriveRequest DriveRequest=(DriveRequest)请求;
driveRequest.setPrettyPrint(真);
driveRequest.setOauthToken(MyApp.accountName);
}
});
返回b.build();
}
/**
*获取登录用户的Google Drive帐户上所有文件的列表。
*/
私有void getDriveFiles(){
驱动器服务=getDriveService();
Log.d(“SiteTrack”、“函数getDriveFiles()”);
文件列表请求;
试一试{
要求