将图像从Android应用程序上传到谷歌驱动器

时间:2013-05-30 02:22:55

标签: android google-drive-api

我使用以下代码上传图片但不起作用。在以下代码中,try块显示错误,文件值为空,任何人都可以帮我解决问题。

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();
      }
    });
  };
}

或有没有办法将文件从Android应用程序发送到谷歌驱动器。

1 个答案:

答案 0 :(得分:0)

好的,您的代码中存在错误:

startActivityForResult(cameraIntent,TAKE_PICTURE);

只需将其替换为:

startActivityForResult(cameraIntent,CAPTURE_IMAGE);

问候