简体   繁体   中英

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

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)

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. if there is any other way to link to the google drive please tell me thank you

I have solved the error for the first error in the OAuth2 line i changed the code to:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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