[英]Connecting to google Drive with Android app
嗨,我使用的是打開相機的代碼,當您拍照時,它將圖片發送到Google驅動器,但是我遇到了兩個錯誤,我不知道該如何解決
這是整個代碼:
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import android.app.Activity;
import android.accounts.AccountManager;
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 MainActivity 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 + "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{
// Files binary content
java.io.File fileContent= new java.io.File(fileUri.getPath());
FileContent mediaContent = new FileContent("image/jpeg", fileContent);
//Files 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_SHORT).show();
}
});
}
}//end of main
我在這行有兩個錯誤
credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);
它說GoogleAccountCredential無法應用於(MainActivity,java.lang.String)
在這一行
File file = service.files().insert(body, mediaContent).execute();
它說無法解決方法執行
請為此,我需要幫助,我一直在嘗試將我的應用程序鏈接到Google驅動器,但大多數情況下都失敗了。 如果還有其他方法可以鏈接到Google雲端硬盤,請告訴我謝謝
我已經解決了OAuth2行中第一個錯誤的錯誤,我將代碼更改為:
credential = GoogleAccountCredential.usingOAuth2(this, Arrays.asList(DriveScopes.DRIVE_FILE)); startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
對於第二個錯誤,我只是添加了一個名為
google-api-services-drive-v2-rev168-1.18.0-rc.jar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.