Created
December 1, 2013 15:09
-
-
Save SmokyBob/7735130 to your computer and use it in GitHub Desktop.
Google Drive Quick Start with Android Studio
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | |
package="com.smokybob.testgdrive" | |
android:versionCode="1" | |
android:versionName="1.0" > | |
<uses-sdk | |
android:minSdkVersion="8" | |
android:targetSdkVersion="19" /> | |
<uses-permission | |
android:name="android.permission.INTERNET" /> | |
<uses-permission | |
android:name="android.permission.GET_ACCOUNTS" /> | |
<application | |
android:allowBackup="true" | |
android:icon="@drawable/ic_launcher" | |
android:label="@string/app_name" | |
android:theme="@style/AppTheme" > | |
<activity | |
android:name="com.smokybob.testgdrive.MainActivity" | |
android:label="@string/app_name" > | |
<intent-filter> | |
<action android:name="android.intent.action.MAIN" /> | |
<category android:name="android.intent.category.LAUNCHER" /> | |
</intent-filter> | |
</activity> | |
<meta-data android:name="com.google.android.gms.version" | |
android:value="@integer/google_play_services_version" /> | |
</application> | |
</manifest> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
buildscript { | |
repositories { | |
mavenCentral() | |
} | |
dependencies { | |
classpath 'com.android.tools.build:gradle:0.6.+' | |
} | |
} | |
apply plugin: 'android' | |
repositories { | |
mavenCentral() | |
} | |
android { | |
compileSdkVersion 19 | |
buildToolsVersion "17.0.0" | |
defaultConfig { | |
minSdkVersion 8 | |
targetSdkVersion 19 | |
} | |
buildTypes { | |
release { | |
runProguard true | |
proguardFile getDefaultProguardFile('proguard-android-optimize.txt') | |
} | |
} | |
productFlavors { | |
defaultFlavor { | |
proguardFile 'proguard-rules.txt' | |
} | |
} | |
} | |
dependencies { | |
compile 'com.android.support:appcompat-v7:+' | |
compile 'com.google.android.gms:play-services:4.0.30' | |
compile 'com.android.support:support-v4:19.0.0' | |
compile('com.google.api-client:google-api-client-xml:1.17.0-rc') { | |
exclude group: 'com.google.android.google-play-services' | |
} | |
compile 'com.google.http-client:google-http-client-gson:1.17.0-rc' | |
compile('com.google.api-client:google-api-client-android:1.17.0-rc') { | |
exclude group: 'com.google.android.google-play-services' | |
} | |
compile 'com.google.apis:google-api-services-drive:v2-rev105-1.17.0-rc' | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.smokybob.testgdrive; | |
import android.accounts.AccountManager; | |
import android.app.Activity; | |
import android.content.Intent; | |
import android.net.Uri; | |
import android.os.Environment; | |
import android.provider.MediaStore; | |
import android.support.v7.app.ActionBarActivity; | |
import android.support.v7.app.ActionBar; | |
import android.support.v4.app.Fragment; | |
import android.os.Bundle; | |
import android.view.LayoutInflater; | |
import android.view.Menu; | |
import android.view.MenuItem; | |
import android.view.View; | |
import android.view.ViewGroup; | |
import android.os.Build; | |
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; | |
import java.io.IOException; | |
import java.text.SimpleDateFormat; | |
import java.util.ArrayList; | |
import java.util.Arrays; | |
import java.util.Date; | |
import java.util.Locale; | |
public class MainActivity extends ActionBarActivity { | |
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 | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
if (savedInstanceState == null) { | |
getSupportFragmentManager().beginTransaction() | |
.add(R.id.container, new PlaceholderFragment()) | |
.commit(); | |
} | |
credential = GoogleAccountCredential.usingOAuth2(this, Arrays.asList(DriveScopes.DRIVE)); | |
startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); | |
} | |
@Override | |
public boolean onCreateOptionsMenu(Menu menu) { | |
// Inflate the menu; this adds items to the action bar if it is present. | |
getMenuInflater().inflate(R.menu.main, menu); | |
return true; | |
} | |
@Override | |
public boolean onOptionsItemSelected(MenuItem item) { | |
// Handle action bar item clicks here. The action bar will | |
// automatically handle clicks on the Home/Up button, so long | |
// as you specify a parent activity in AndroidManifest.xml. | |
int id = item.getItemId(); | |
if (id == R.id.action_settings) { | |
return true; | |
} | |
return super.onOptionsItemSelected(item); | |
} | |
/** | |
* A placeholder fragment containing a simple view. | |
*/ | |
public static class PlaceholderFragment extends Fragment { | |
public PlaceholderFragment() { | |
} | |
@Override | |
public View onCreateView(LayoutInflater inflater, ViewGroup container, | |
Bundle savedInstanceState) { | |
View rootView = inflater.inflate(R.layout.fragment_main, container, false); | |
return rootView; | |
} | |
} | |
@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 { | |
// File's binary content | |
java.io.File fileContent = new java.io.File(fileUri.getPath()); | |
FileContent mediaContent = new FileContent("image/jpeg", fileContent); | |
// File's 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(); | |
} | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you kind Sir!
Gradle script needs update though!
runProguard has been renamed minifyEnabled & versions