繁体   English   中英

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

[英]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.

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