2016-08-03 12 views
1

Ich integrierte Google Drive erfolgreich in meine Android App. Die ausgewählte Bilddatei konnte jedoch nicht heruntergeladen werden. Hier ist mein Code. Es gibt ein Problem Ergebnis Rückrufmethode wird nie ausgeführt. Bitte hilf mir. Und ich auch data.getData() Methode in onActivity Ergebnis dieser Methode nur zurück null. Wie kann ich URI des Bildes finden?Bild von Google Drive Android API herunterladen?

package com.example.syedfurqan.dropboxintegration; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.IntentSender; 
import android.content.IntentSender.SendIntentException; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ImageView; 
import android.widget.Toast; 

import com.dropbox.chooser.android.DbxChooser; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GoogleApiAvailability; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.PendingResult; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.drive.Drive; 
import com.google.android.gms.drive.DriveApi; 
import com.google.android.gms.drive.DriveContents; 
import com.google.android.gms.drive.DriveFile; 
import com.google.android.gms.drive.DriveId; 
import com.google.android.gms.drive.DriveResource; 
import com.google.android.gms.drive.Metadata; 
import com.google.android.gms.drive.OpenFileActivityBuilder; 

import java.io.InputStream; 



public class BaseDemoActivity extends Activity implements 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 

    private static final String TAG = "BaseDriveActivity"; 

    protected static final int REQUEST_CODE_RESOLUTION = 1; 

    private static final int REQ_CODE_OPEN = 2; 


    private GoogleApiClient mGoogleApiClient; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // setContentView(R.layout.activity_base_demo); 
     if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(Drive.API) 
        .addScope(Drive.SCOPE_FILE) 
        .addScope(Drive.SCOPE_APPFOLDER) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .build(); 
     } 
     mGoogleApiClient.connect(); 
    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, 
            Intent data) { 
     switch (requestCode) { 
      case REQ_CODE_OPEN: 
       if (resultCode == RESULT_OK) { 
        DriveId mFileId = (DriveId) data 
          .getParcelableExtra(OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID); 
        DriveFile selectedFile = mFileId.asDriveFile(); 


        selectedFile.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null) 
          .setResultCallback(idCallback); 

       } else { 
        finish(); 
       } 
       break; 
      default: 
       super.onActivityResult(requestCode, resultCode, data); 
     } 
    } 

    @Override 
    protected void onPause() { 
     if (mGoogleApiClient != null) { 
      mGoogleApiClient.disconnect(); 
     } 
     super.onPause(); 
    } 


//Picker 
    @Override 
    public void onConnected(Bundle connectionHint) { 
     Log.i(TAG, "GoogleApiClient connected"); 
     // Launch user interface and allow user to select file 
     try { 
      IntentSender i = Drive.DriveApi 
        .newOpenFileActivityBuilder() 
        .setMimeType(new String[]{"image/png", "image/jpeg"}) 
        .build(mGoogleApiClient); 
      startIntentSenderForResult(i, REQ_CODE_OPEN, null, 0, 0, 0); 
     } catch (Exception e) { 
     } 
    } 

    final private ResultCallback<DriveApi.DriveContentsResult> idCallback = new ResultCallback<DriveApi.DriveContentsResult>() { 
     @Override 
     public void onResult(DriveApi.DriveContentsResult result) { 
      if (!result.getStatus().isSuccess()) { 
       // Handle an error 
      } 
      DriveContents driveContents = result.getDriveContents(); 
      InputStream is = driveContents.getInputStream(); 
      Bitmap bitmap = BitmapFactory.decodeStream(is); 
      Values.setBitmap(bitmap); 

     } 
    }; 



    @Override 
    public void onConnectionSuspended(int cause) { 
     Log.i(TAG, "GoogleApiClient connection suspended"); 
    } 


    @Override 
    public void onConnectionFailed(ConnectionResult result) { 
     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; 
     } 
     try { 
      result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION); 
     } catch (SendIntentException e) { 
      Log.e(TAG, "Exception while starting resolution activity", e); 
     } 
    } 


    /** 
    * Shows a toast message. 
    */ 

    public void showMessage(String message) { 
     Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 
    } 


    /** 
    * Getter for the {@code GoogleApiClient}. 
    */ 

    public GoogleApiClient getGoogleApiClient() { 
     return mGoogleApiClient; 
    } 


} 
+0

ich die Lösung nun gefunden .. :) – Furqan

Antwort

3

Ich habe gerade Android Google Drive Standard-API-Klassen für meine Aufgabe verwendet. Und hier ist der Code:

// BaseDemoActivity

package com.example.syedfurqan.dropboxintegration; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.IntentSender.SendIntentException; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.drive.Drive; 

public abstract class BaseDemoActivity extends Activity implements 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 

    private static final String TAG = "BaseDriveActivity"; 
    protected static final int REQUEST_CODE_RESOLUTION = 1; 


    /** 
    * Google API client. 
    */ 
    private GoogleApiClient mGoogleApiClient; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(Drive.API) 
        .addScope(Drive.SCOPE_FILE) 
        .addScope(Drive.SCOPE_APPFOLDER) // required for App Folder sample 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .build(); 
     } 
     mGoogleApiClient.connect(); 
    } 

    /** 
    * Handles resolution callbacks. 
    */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, 
            Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == RESULT_OK) { 
      mGoogleApiClient.connect(); 
     } 
    } 

    @Override 
    protected void onPause() { 
     if (mGoogleApiClient != null) { 
      mGoogleApiClient.disconnect(); 
     } 
     super.onPause(); 
    } 

    /** 
    * Called when {@code mGoogleApiClient} is connected. 
    */ 
    @Override 
    public void onConnected(Bundle connectionHint) { 
     Log.i(TAG, "GoogleApiClient connected"); 
    } 

    /** 
    * Called when {@code mGoogleApiClient} is disconnected. 
    */ 
    @Override 
    public void onConnectionSuspended(int cause) { 
     Log.i(TAG, "GoogleApiClient connection suspended"); 
    } 

    /** 
    * Called when {@code mGoogleApiClient} is trying to connect but failed. 
    * Handle {@code result.getResolution()} if there is a resolution is 
    * available. 
    */ 
    @Override 
    public void onConnectionFailed(ConnectionResult result) { 
     Log.i(TAG, "GoogleApiClient connection failed: " + result.toString()); 
     if (!result.hasResolution()) { 
      // show the localized error dialog. 
      GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 0).show(); 
      return; 
     } 
     try { 
      result.startResolutionForResult(this, REQUEST_CODE_RESOLUTION); 
     } catch (SendIntentException e) { 
      Log.e(TAG, "Exception while starting resolution activity", e); 
     } 
    } 

    /** 
    * Shows a toast message. 
    */ 
    public void showMessage(String message) { 
     Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 
    } 

    /** 
    * Getter for the {@code GoogleApiClient}. 
    */ 
    public GoogleApiClient getGoogleApiClient() { 
     return mGoogleApiClient; 
    } 
} 

// Abrufen von Inhalten

package com.example.syedfurqan.dropboxintegration; 


import android.content.Intent; 
import android.content.IntentSender; 
import android.content.IntentSender.SendIntentException; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ProgressBar; 

import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.drive.Drive; 
import com.google.android.gms.drive.DriveApi.DriveContentsResult; 
import com.google.android.gms.drive.DriveContents; 
import com.google.android.gms.drive.DriveFile; 
import com.google.android.gms.drive.DriveFile.DownloadProgressListener; 
import com.google.android.gms.drive.DriveId; 
import com.google.android.gms.drive.OpenFileActivityBuilder; 

import java.io.InputStream; 

/** 
* An activity to illustrate how to open contents and listen 
* the download progress if the file is not already sync'ed. 
*/ 
public class RetreiveContent extends BaseDemoActivity { 

    private static final String TAG = "RetrieveFileWithProgressDialogActivity"; 

    /** 
    * Request code to handle the result from file opening activity. 
    */ 
    private static final int REQUEST_CODE_OPENER = 1; 

    /** 
    * Progress bar to show the current download progress of the file. 
    */ 
    private ProgressBar mProgressBar; 

    /** 
    * File that is selected with the open file activity. 
    */ 
    private DriveId mSelectedFileDriveId; 

    @Override 
    protected void onCreate(Bundle b) { 
     super.onCreate(b); 
     setContentView(R.layout.activity_progress); 
     mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 
     mProgressBar.setMax(100); 
    } 

    @Override 
    public void onConnected(Bundle connectionHint) { 
     super.onConnected(connectionHint); 

     // If there is a selected file, open its contents. 
     if (mSelectedFileDriveId != null) { 
      open(); 
      return; 
     } 

     // Let the user pick an mp4 or a jpeg file if there are 
     // no files selected by the user. 
     IntentSender intentSender = Drive.DriveApi 
       .newOpenFileActivityBuilder() 
       .setMimeType(new String[]{"video/mp4", "image/png", "image/jpeg"}) 
       .build(getGoogleApiClient()); 
     try { 
      startIntentSenderForResult(intentSender, REQUEST_CODE_OPENER, null, 0, 0, 0); 
     } catch (SendIntentException e) { 
//   Log.w(TAG, "Unable to send intent", e); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_CODE_OPENER && resultCode == RESULT_OK) { 
      mSelectedFileDriveId = (DriveId) data.getParcelableExtra(
        OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID); 

//   open(); 
     } else { 
      super.onActivityResult(requestCode, resultCode, data); 
     } 
    } 

    private void open() { 
     // Reset progress dialog back to zero as we're 
     // initiating an opening request. 
     mProgressBar.setProgress(0); 
     DownloadProgressListener listener = new DownloadProgressListener() { 
      @Override 
      public void onProgress(long bytesDownloaded, long bytesExpected) { 
       // Update progress dialog with the latest progress. 
       int progress = (int) (bytesDownloaded * 100/bytesExpected); 
       Log.d(TAG, String.format("Loading progress: %d percent", progress)); 
       mProgressBar.setProgress(progress); 
      } 
     }; 
     Drive.DriveApi.getFile(getGoogleApiClient(), mSelectedFileDriveId) 
       .open(getGoogleApiClient(), DriveFile.MODE_READ_ONLY, listener) 
       .setResultCallback(driveContentsCallback); 
     mSelectedFileDriveId = null; 
    } 

    private ResultCallback<DriveContentsResult> driveContentsCallback = 
      new ResultCallback<DriveContentsResult>() { 
       @Override 
       public void onResult(DriveContentsResult result) { 
        if (!result.getStatus().isSuccess()) { 
         showMessage("Error while opening the file contents"); 
         return; 
        } 
        DriveContents driveContents = result.getDriveContents(); 
        InputStream is = driveContents.getInputStream(); 
        Bitmap bitmap = BitmapFactory.decodeStream(is); 
        Values.setBitmap(bitmap); 
        //showMessage("File contents opened"); 
        RetreiveContent.this.finish(); 

       } 
      }; 
} 
+2

So groß !. Vielen Dank. – sonnv1368

Verwandte Themen