简体   繁体   中英

Upload image from android application to google drive

I am using the following code to upload the image but it will not work.In the following code the try block shows the error and the file value will be empty any one can help me to solve the problem.

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 final int TAKE_PICTURE = 2;
ImageView im;

  private static Uri fileUri;
  java.io.File fileContent;
  FileContent mediaContent; 
  java.io.File f;
  File body;
  File nfile;
  File file;
  private static Drive service;
  private GoogleAccountCredential credential;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    im=(ImageView)findViewById(R.id.imageView1);
    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:
        Toast.makeText(getApplicationContext(), ""+REQUEST_AUTHORIZATION,100).show();
      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();



    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date(0, 0, 0));
    f=new java.io.File(Environment.getExternalStorageDirectory(),"test"+timeStamp+".jpg");


    fileUri=Uri.fromFile(f);

    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
    startActivityForResult(cameraIntent,TAKE_PICTURE);


  }

  private void saveFileToDrive() {


      Toast.makeText(getApplicationContext(), "start",100).show();
    Thread t = new Thread(new Runnable() {
      @Override
      public void run() {
          try
          {
        // File's binary content
            fileContent = new java.io.File(fileUri.getPath());
            mediaContent= new FileContent("image/jpeg", fileContent);


            body=new File();

            body.setTitle(fileContent.getName());
            body.setMimeType("image/jpeg");
            //file=body;

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


                //file=service.files().insert(body).execute();
                showToast("try run: ");


          if (file!=null)
          {
            showToast("Photo uploaded: " + file.getTitle());

            startCameraIntent();
          }
          else
          {     
                showToast("error");
          }
      }

          catch (UserRecoverableAuthIOException e) {
              startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
                showToast("first catch");

            } catch (IOException e) {
              e.printStackTrace();
                showToast("second catch"+file);

            }
          finally
          {

                showToast("finally");


          }
          }

    });
    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,100).show();
      }
    });
  };
}

or is there any way to send files from android application to google drive.

Ok, there is a error in your code:

startActivityForResult(cameraIntent,TAKE_PICTURE);

Just replace that for:

startActivityForResult(cameraIntent,CAPTURE_IMAGE);

Greetings

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