Как отправить несколько изображений, которые присутствуют в папке на диске Google в программном обеспечении Android?

Я хочу отправить несколько изображений, которые присутствуют в моем внутреннем хранилище, и когда я выбираю эту папку, я хочу загрузить эту папку в Google Drive. Я пробовал этот google-диск api для Android https://developers.google.com/drive/android/create-file, и я использовал приведенный ниже код, но он показывает некоторую ошибку в getGoogleApiClient

Код

 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 } } } 

Есть ли какой-либо подход для отправки изображений на диск или gmail?

    Я не могу дать вам точный код, который делает то, что вам нужно, но вы можете попробовать изменить код, который я использую для тестирования Android-API Google Диска (GDAA). Он создает папки и загружает файлы на Google Диск. Это зависит от вас, если вы выберете аромат REST или GDAA, каждый из которых имеет особые преимущества.

    Тем не менее, это касается только половины вашего вопроса. Выбор и перечисление файлов на Android-устройстве должен быть рассмотрен в другом месте.

    ОБНОВЛЕНИЕ: (по комментариям Фрэнка ниже)

    Пример, который я упомянул выше, даст вам полное решение с нуля, но давайте рассмотрим вопросы вашего вопроса, которые я мог бы расшифровать:

    Препятствие « некоторая ошибка » – это метод, который возвращает объект GoogleApiClient, инициализированный до вашей кодовой последовательности. Будет выглядеть примерно так:

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

    Если вы это очистили, давайте предположим, что ваша папка представлена ​​объектом java.io.File. Вот код, который:

    1 / перечисляет файлы в вашей локальной папке
    2 / задает имя, содержимое и тип MIME для каждого файла (для удобства здесь используется jpeg ).
    3 / загружает каждый файл в корневую папку диска Google
    (Метод create () должен запускать поток за пределами UI)

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

    Иглы, чтобы сказать, что код здесь берется непосредственно из оболочки GDAA здесь (упоминается в начале), поэтому, если вам нужно разрешить любые ссылки, вам нужно найти там код.

    Удачи