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.