Android Créer un fichier sur Google Drive


Exemple

Nous allons ajouter un fichier sur Google Drive. Nous allons utiliser la createFile() d'un objet Drive pour créer un fichier par programme sur Google Drive. Dans cet exemple nous ajoutons un nouveau fichier texte dans le dossier racine de l'utilisateur. Lorsqu'un fichier est ajouté, nous devons spécifier le jeu initial de métadonnées, le contenu du fichier et le dossier parent.

Nous devons créer une méthode de rappel CreateMyFile() et, au sein de cette méthode, utiliser l'objet Drive pour extraire une ressource DriveContents . Ensuite, nous passons le client API à l'objet Drive et appelons la méthode de rappel driveContentsCallback pour gérer le résultat de DriveContents .

Une ressource DriveContents contient une copie temporaire du flux binaire du fichier, uniquement disponible pour l'application.

public void CreateMyFile(){
    fileOperation = true;
    // Create new contents resource.
    Drive.DriveApi.newDriveContents(mGoogleApiClient)
                  .setResultCallback(driveContentsCallback);
}

Gestionnaire de résultat de DriveContents

La gestion de la réponse nécessite de vérifier si l'appel a réussi ou non. Si l'appel a réussi, nous pouvons récupérer la ressource DriveContents .

Nous allons créer un gestionnaire de résultats de DriveContents . Dans cette méthode, nous appelons la méthode CreateFileOnGoogleDrive() et transmettons le résultat de 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);
                    }
                }
            }
        };

Créer un fichier par programme

Pour créer des fichiers, nous devons utiliser un objet MetadataChangeSet . En utilisant cet objet, nous définissons le titre (nom du fichier) et le type de fichier. En outre, nous devons utiliser la createFile() de la classe DriveFolder et transmettre l'API cliente Google, l'objet MetaDataChangeSet et driveContents pour créer un fichier. Nous appelons le rappel du gestionnaire de résultats pour gérer le résultat du fichier créé.

Nous utilisons le code suivant pour créer un nouveau fichier texte dans le dossier racine de l'utilisateur:

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

Gérer le résultat du fichier créé

Le code suivant créera une méthode de rappel pour gérer le résultat du fichier créé:

/**
 * 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;
            }
        };