Android
Google Drive API
Zoeken…
Invoering
Google Drive is een service voor bestandshosting die is gemaakt door Google . Het biedt service voor bestandsopslag en stelt de gebruiker in staat bestanden in de cloud te uploaden en ook met andere mensen te delen. Met Google Drive API kunnen we bestanden synchroniseren tussen computer of mobiel apparaat en Google Drive Cloud.
Opmerkingen
wettelijk
Als u de Google Drive Android API in uw applicatie gebruikt, moet u de attributietekst van Google Play Services opnemen als onderdeel van een sectie 'Juridische kennisgevingen' in uw applicatie.
Het wordt aanbevolen om juridische kennisgevingen op te nemen als een onafhankelijk menu-item of als onderdeel van een menu-item "Over".
U kunt GooglePlayServicesUtil.getOpenSourceSoftwareLicenseInfo()
bellen om de attributietekst tijdens runtime te krijgen.
Integreer Google Drive in Android
Maak een nieuw project op Google Developer Console
Om de Android-applicatie te integreren met Google Drive, maakt u de referenties van het project in de Google Developers Console. We moeten dus een project maken op de Google Developer-console.
Volg deze stappen om een project te maken op Google Developer Console:
Ga naar Google Developer Console voor Android. Vul de naam van uw project in het invoerveld en klik op de knop Maken om een nieuw project op Google Developer console te maken.
We moeten referenties aanmaken om toegang te krijgen tot API. Klik dus op de knop Referenties maken .
Nu wordt een pop-venster geopend. Klik op de optie API-sleutel in de lijst om een API-sleutel te maken.
We hebben een API-sleutel nodig om Google API's voor Android aan te roepen. Klik dus op de Android-toets om uw Android-project te identificeren.
Vervolgens moeten we de pakketnaam van het Android-project en de SHA-1-vingerafdruk toevoegen in de invoervelden om een API-sleutel te maken.
We moeten SHA-1-vingerafdruk genereren. Open dus uw terminal en voer Keytool uit om de SHA1-vingerafdruk te krijgen. Tijdens het uitvoeren van het hulpprogramma Keytool moet u het wachtwoord van de keystore opgeven . Het standaard wachtwoord voor ontwikkelingstooltool is 'android' .
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
Voeg nu Pakketnaam en SHA-1-vingerafdruk toe in invoervelden op de inlogpagina. Klik ten slotte op de knop Maken om de API-sleutel te maken.
Hiermee wordt een API-sleutel voor Android gemaakt. We zullen deze API-sleutel gebruiken om de Android-applicatie te integreren met Google Drive.
Schakel Google Drive API in
We moeten Google Drive Api toegang geven tot bestanden die zijn opgeslagen op Google Drive vanuit de Android-applicatie. Volg onderstaande stappen om Google Drive API in te schakelen:
Ga naar uw Google Developer console Dashboard en klik op API's inschakelen om referenties zoals sleutels te verkrijgen, dan ziet u populaire Google API's.
Klik op de Drive API- link om de overzichtspagina van Google Drive API te openen.
Klik op de knop Inschakelen om Google Drive API in te schakelen. Het geeft clienttoegang tot Google Drive.
Internetmachtiging toevoegen
App heeft Google Drive-bestanden met internettoegang nodig. Gebruik de volgende code om internetmachtigingen in te stellen in het bestand AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
Voeg Google Play-services toe
We zullen Google Play Services API gebruiken die de Google Drive Android API bevat . Dus moeten we Google Play Services SDK instellen in de Android-applicatie. Open uw build.gradle
(app-module) en voeg Google Play Services SDK toe als afhankelijkheden.
dependencies {
....
compile 'com.google.android.gms:play-services:<latest_version>'
....
}
Voeg een API-sleutel toe aan het Manifest-bestand
Als u Google API in de Android-toepassing wilt gebruiken, moeten we de API-sleutel en -versie van de Google Play-service toevoegen aan het bestand AndroidManifest.xml. Voeg de juiste metadatatags toe binnen de tag van het bestand AndroidManifest.xml.
Verbind en autoriseer de Google Drive Android API
We moeten Google Drive Android API verifiëren en verbinden met de Android-applicatie. Autorisatie van Google Drive Android API wordt afgehandeld door GoogleApiClient . We zullen GoogleApiClient te gebruiken binnen onResume () methode.
/**
* Called when the activity will start interacting with the user.
* At this point your activity is at the top of the activity stack,
* with user input going to it.
*/
@Override
protected void onResume() {
super.onResume();
if (mGoogleApiClient == null) {
/**
* Create the API client and bind it to an instance variable.
* We use this instance as the callback for connection and connection failures.
* Since no account name is passed, the user is prompted to choose.
*/
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
mGoogleApiClient.connect();
}
Verbreek de Google Deive Android API
Wanneer de activiteit stopt, zullen we de Google Drive Android API-verbinding met de Android-toepassing verbreken door de methode disconnect () aan te roepen in de onStop () -methode van activity.
@Override
protected void onStop() {
super.onStop();
if (mGoogleApiClient != null) {
// disconnect Google Android Drive API connection.
mGoogleApiClient.disconnect();
}
super.onPause();
}
Implementeer Connection Callbacks en Connection Failed Listener
We zullen Connection Callbacks en Connection Failed Listener van Google API-client implementeren in het bestand MainActivity.java om de status van de verbinding van Google API-client te kennen. Deze luisteraars bieden de methode onConnected (), onConnectionFailed (), onConnectionSuspended () om de verbindingsproblemen tussen de app en Drive af te handelen.
Als de gebruiker de toepassing heeft geautoriseerd, wordt de methode onConnected () aangeroepen. Als de gebruiker de applicatie niet heeft geautoriseerd, wordt de methode onConnectionFailed () aangeroepen en wordt er een dialoogvenster voor de gebruiker weergegeven dat uw app geen toegang heeft tot Google Drive. Als de verbinding wordt onderbroken, wordt de methode onConnectionSuspended () aangeroepen.
U moet ConnectionCallbacks en OnConnectionFailedListener in uw activiteit implementeren. Gebruik de volgende code in uw Java-bestand.
@Override
public void onConnectionFailed(ConnectionResult result) {
// Called whenever the API client fails to connect.
Log.i(TAG, "GoogleApiClient connection failed:" + result.toString());
if (!result.hasResolution()) {
// show the localized error dialog.
GoogleApiAvailability.getInstance().getErrorDialog(this, result.getErrorCode(), 0).show();
return;
}
/**
* The failure has a resolution. Resolve it.
* Called typically when the app is not yet authorized, and an authorization
* dialog is displayed to the user.
*/
try {
result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION);
} catch (SendIntentException e) {
Log.e(TAG, "Exception while starting resolution activity", e);
}
}
/**
* It invoked when Google API client connected
* @param connectionHint
*/
@Override
public void onConnected(Bundle connectionHint) {
Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show();
}
/**
* It invoked when connection suspended
* @param cause
*/
@Override
public void onConnectionSuspended(int cause) {
Log.i(TAG, "GoogleApiClient connection suspended");
}
Maak een bestand op Google Drive
We zullen een bestand toevoegen op Google Drive. We gebruiken de methode createFile()
van een Drive
object om programmatisch een bestand op Google Drive te maken. In dit voorbeeld voegen we een nieuw tekstbestand toe aan de hoofdmap van de gebruiker. Wanneer een bestand wordt toegevoegd, moeten we de eerste set metagegevens, de inhoud van het bestand en de bovenliggende map opgeven.
We moeten een CreateMyFile()
callback-methode maken en binnen deze methode het Drive
object gebruiken om een DriveContents
bron op te halen. Vervolgens geven we de API-client door aan het Drive
object en roepen de driveContentsCallback
callback-methode aan om het resultaat van DriveContents
.
Een DriveContents
bron bevat een tijdelijke kopie van de binaire stream van het bestand die alleen beschikbaar is voor de toepassing.
public void CreateMyFile(){
fileOperation = true;
// Create new contents resource.
Drive.DriveApi.newDriveContents(mGoogleApiClient)
.setResultCallback(driveContentsCallback);
}
Resultaathandler van DriveContents
Om de reactie af te handelen, moet worden gecontroleerd of de oproep succesvol was of niet. Als de oproep succesvol was, kunnen we de DriveContents
bron ophalen.
We zullen een resultaathandler van DriveContents
. Binnen deze methode roepen we de methode CreateFileOnGoogleDrive()
en geven we het resultaat van DriveContentsResult
:
/**
* This is the Result result handler of Drive contents.
* This callback method calls the CreateFileOnGoogleDrive() method.
*/
final ResultCallback<DriveContentsResult> driveContentsCallback =
new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult result) {
if (result.getStatus().isSuccess()) {
if (fileOperation == true){
CreateFileOnGoogleDrive(result);
}
}
}
};
Maak een programma programmatisch aan
Om bestanden te maken, moeten we een MetadataChangeSet
object gebruiken. Door dit object te gebruiken, stellen we de titel (bestandsnaam) en het bestandstype in. We moeten ook de methode createFile()
van de klasse DriveFolder
en de Google client-API, het MetaDataChangeSet
object en de driveContents
om een bestand te maken. We noemen de resultaathandler callback om het resultaat van het gemaakte bestand af te handelen.
We gebruiken de volgende code om een nieuw tekstbestand in de hoofdmap van de gebruiker te maken:
/**
* Create a file in the root folder using a MetadataChangeSet object.
* @param result
*/
public void CreateFileOnGoogleDrive(DriveContentsResult result){
final DriveContents driveContents = result.getDriveContents();
// Perform I/O off the UI thread.
new Thread() {
@Override
public void run() {
// Write content to DriveContents.
OutputStream outputStream = driveContents.getOutputStream();
Writer writer = new OutputStreamWriter(outputStream);
try {
writer.write("Hello Christlin!");
writer.close();
} catch (IOException e) {
Log.e(TAG, e.getMessage());
}
MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
.setTitle("My First Drive File")
.setMimeType("text/plain")
.setStarred(true).build();
// Create a file in the root folder.
Drive.DriveApi.getRootFolder(mGoogleApiClient)
.createFile(mGoogleApiClient, changeSet, driveContents)
setResultCallback(fileCallback);
}
}.start();
}
Resultaat van aangemaakt bestand verwerken
De volgende code maakt een callback-methode om het resultaat van het gemaakte bestand af te handelen:
/**
* Handle result of Created file
*/
final private ResultCallback<DriveFolder.DriveFileResult> fileCallback = new
ResultCallback<DriveFolder.DriveFileResult>() {
@Override
public void onResult(DriveFolder.DriveFileResult result) {
if (result.getStatus().isSuccess()) {
Toast.makeText(getApplicationContext(), "file created: "+
result.getDriveFile().getDriveId(), Toast.LENGTH_LONG).show();
}
return;
}
};