简体   繁体   English

使用Android应用连接到Google云端硬盘

[英]Connecting to google Drive with Android app

Hi i am using a code which opens the camera and when you take a picture it sends the picture to the google drive ,but i have be facing two errors which i dont know how to fix 嗨,我使用的是打开相机的代码,当您拍照时,它将图片发送到Google驱动器,但是我遇到了两个错误,我不知道该如何解决

here is the whole code: 这是整个代码:

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

I am having two errors ,at this line 我在这行有两个错误

credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);

it says GoogleAccountCredential cannot be applied to (MainActivity, java.lang.String) 它说GoogleAccountCredential无法应用于(MainActivity,java.lang.String)

and at this line 在这一行

 File file = service.files().insert(body, mediaContent).execute();

it says cannot resolve method execute 它说无法解决方法执行

please i need help with this i have been trying to link my app to the google drive but it fails most of the time. 请为此,我需要帮助,我一直在尝试将我的应用程序链接到Google驱动器,但大多数情况下都失败了。 if there is any other way to link to the google drive please tell me thank you 如果还有其他方法可以链接到Google云端硬盘,请告诉我谢谢

I have solved the error for the first error in the OAuth2 line i changed the code to: 我已经解决了OAuth2行中第一个错误的错误,我将代码更改为:

credential = GoogleAccountCredential.usingOAuth2(this, Arrays.asList(DriveScopes.DRIVE_FILE)); startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);

and for the second error i just added a jar file called 对于第二个错误,我只是添加了一个名为

google-api-services-drive-v2-rev168-1.18.0-rc.jar google-api-services-drive-v2-rev168-1.18.0-rc.jar

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM