2015-01-31 14 views
10

Dahili depolama birimimde bulunan ve bu klasörü google sürücüye yüklemek istediğim klasörü seçtiğimde birden fazla resim göndermek istiyorum. i https://developers.google.com/drive/android/create-file android için bu google drive api denedim ve ben aşağıdaki kodu kullanmış ancak sürücü görüntüleri veya gmail göndermek için herhangi bir yaklaşım yoktur koduAndroid'de programlı olarak google sürücüsüne klasörde bulunan birden fazla görüntü nasıl gönderilir?

ResultCallback<DriveContentsResult> contentsCallback = new 
     ResultCallback<DriveContentsResult>() { 
    @Override 
    public void onResult(DriveContentsResult result) { 
     if (!result.getStatus().isSuccess()) { 
      // Handle error 
      return; 
     } 

     MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder() 
       .setMimeType("text/html").build(); 
     IntentSender intentSender = Drive.DriveApi 
       .newCreateFileActivityBuilder() 
       .setInitialMetadata(metadataChangeSet) 
       .setInitialDriveContents(result.getDriveContents()) 
       .build(getGoogleApiClient()); 
     try { 
      startIntentSenderForResult(intentSender, 1, null, 0, 0, 0); 
     } catch (SendIntentException e) { 
      // Handle the exception 
     } 
    } 
} 

olduğunu getGoogleApiClient

bazı hata gösteriyor ?

+0

"bazı hatalar gösteriyor": Ayrıntılar lütfen! – Henry

+0

burada hata gösteriyor.build (getGoogleApiClient()); getGoogleApiClient'in kullanılabilir olmadığını ve GoogleApiClient'in yapım aşamasında geçiş yapması için nesne oluşturamadığımı gösteriyor – Hanuman

cevap

3

Size gerekenleri yapan tam kodu veremem ancak the code I use for testing Google Drive Android API'sini (GDAA) değiştirmeyi deneyebilirsiniz. Klasörler oluşturur ve Google Drive'a dosya yükler. REST veya GDAA lezzetini seçerseniz, her birinin kendine özgü avantajları vardır.

Bu, sorunuzun yalnızca yarısını kapsar. Android cihazınızdaki dosyaların seçilmesi ve numaralandırılması başka bir yerde ele alınmalıdır.

GÜNCELLEME: (aşağıda Frank'ın yorumun başına)

Sana sıfırdan tam bir çözüm vermek, ama senin sorunun noktalarını ele izin verecek yukarıda belirtilen örnek ı deşifre olabilir:

engel 'bazı hatalar' kod sıranızdan önce başlatılan GoogleApiClient nesnesini döndüren bir yöntemdir. gibi görünecektir: Bu boşalttığı belirtildi varsa

GoogleApiClient mGAC = new GoogleApiClient.Builder(appContext) 
    .addApi(Drive.API).addScope(Drive.SCOPE_FILE) 
    .addConnectionCallbacks(callerContext) 
    .addOnConnectionFailedListener(callerContext) 
    .build(); 

, senin klasör bir java.io.File nesnesi tarafından temsil edilir düşünelim.

1/yerel klasörde
2'de dosyaları sıralar/(basitlik için jpeg burada kullanarak) her dosyanın adı, içeriği ve MIME türünü ayarlar: Burada kodudur. Google'ın kök klasörüne her dosya burada kod GDAA wrapper here doğrudan alınır söylemek

// enumerating files in a folder, uploading to Google Drive 
java.io.File folder = ...; 
for (java.io.File file : folder.listFiles()) { 
    create("root", file.getName(), "image/jpeg", file2Bytes(file)) 
} 

/****************************************************** 
* create file/folder in GOODrive 
* @param prnId parent's ID, (null or "root") for root 
* @param titl file name 
* @param mime file mime type 
* @param buf file contents (optional, if null, create folder) 
* @return  file id/null on fail 
*/ 
static String create(String prnId, String titl, String mime, byte[] buf) { 
    DriveId dId = null; 
    if (mGAC != null && mGAC.isConnected() && titl != null) try { 
    DriveFolder pFldr = (prnId == null || prnId.equalsIgnoreCase("root")) ? 
    Drive.DriveApi.getRootFolder(mGAC): 
    Drive.DriveApi.getFolder(mGAC, DriveId.decodeFromString(prnId)); 
    if (pFldr == null) return null; //----------------->>> 

    MetadataChangeSet meta; 
    if (buf != null) { // create file 
     DriveContentsResult r1 = Drive.DriveApi.newDriveContents(mGAC).await(); 
     if (r1 == null || !r1.getStatus().isSuccess()) return null; //-------->>> 

     meta = new MetadataChangeSet.Builder().setTitle(titl).setMimeType(mime).build(); 
     DriveFileResult r2 = pFldr.createFile(mGAC, meta, r1.getDriveContents()).await(); 
     DriveFile dFil = r2 != null && r2.getStatus().isSuccess() ? r2.getDriveFile() : null; 
     if (dFil == null) return null; //---------->>> 

     r1 = dFil.open(mGAC, DriveFile.MODE_WRITE_ONLY, null).await(); 
     if ((r1 != null) && (r1.getStatus().isSuccess())) try { 
      Status stts = bytes2Cont(r1.getDriveContents(), buf).commit(mGAC, meta).await(); 
      if ((stts != null) && stts.isSuccess()) { 
      MetadataResult r3 = dFil.getMetadata(mGAC).await(); 
      if (r3 != null && r3.getStatus().isSuccess()) { 
       dId = r3.getMetadata().getDriveId(); 
      } 
      } 
     } catch (Exception e) { /* error handling*/ } 

    } else { 
     meta = new MetadataChangeSet.Builder().setTitle(titl).setMimeType("application/vnd.google-apps.folder").build(); 
     DriveFolderResult r1 = pFldr.createFolder(mGAC, meta).await(); 
     DriveFolder dFld = (r1 != null) && r1.getStatus().isSuccess() ? r1.getDriveFolder() : null; 
     if (dFld != null) { 
     MetadataResult r2 = dFld.getMetadata(mGAC).await(); 
     if ((r2 != null) && r2.getStatus().isSuccess()) { 
      dId = r2.getMetadata().getDriveId(); 
     } 
     } 
    } 
    } catch (Exception e) { /* error handling*/ } 
    return dId == null ? null : dId.encodeToString(); 
} 
//----------------------------- 
static byte[] file2Bytes(File file) { 
    if (file != null) try { 
    return is2Bytes(new FileInputStream(file)); 
    } catch (Exception e) {} 
    return null; 
} 
//---------------------------- 
static byte[] is2Bytes(InputStream is) { 
    byte[] buf = null; 
    BufferedInputStream bufIS = null; 
    if (is != null) try { 
    ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); 
    bufIS = new BufferedInputStream(is); 
    buf = new byte[2048]; 
    int cnt; 
    while ((cnt = bufIS.read(buf)) >= 0) { 
     byteBuffer.write(buf, 0, cnt); 
    } 
    buf = byteBuffer.size() > 0 ? byteBuffer.toByteArray() : null; 
    } catch (Exception e) {} 
    finally { 
    try { 
     if (bufIS != null) bufIS.close(); 
    } catch (Exception e) {} 
    } 
    return buf; 
} 
//-------------------------- 
private static DriveContents bytes2Cont(DriveContents driveContents, byte[] buf) { 
    OutputStream os = driveContents.getOutputStream(); 
    try { os.write(buf); 
    } catch (IOException e) {/*error handling*/} 
    finally { 
    try { os.close(); 
    } catch (Exception e) {/*error handling*/} 
    } 
    return driveContents; 
} 

iğneleri ( yöntemi dışı UI iş parçacığı çalıştırmalısınız) (oluşturmak )
sürücü
3/yüklenenler (başlangıçta belirtilen), dolayısıyla herhangi bir referansı çözmeniz gerekiyorsa, oradaki kodu aramak zorundasınız.

İyi Şanslar

İlgili konular