#android #url #google-drive-api #android-bitmap #google-drive-android-api
#Android #url #google-drive-api #android-растровое изображение #google-drive-android-api
Вопрос:
В моем приложении мне нужно сделать снимок и управлять его хранилищем. У меня есть два варианта: сохранить фотографию в локальной памяти или на Google Диске, и я должен отслеживать любую фотографию в базе данных SQLite. Мое приложение работает очень хорошо, но у меня большая проблема:
Если я решу сохранить фотографию на Google Диске, когда я нажму OK в результате действия Google Диска (где вы выбираете имя файла и папку на диске) Мне нужно получить URL-адрес файла, который я только что загрузил в своей учетной записи Google Drive. Как я могу это сделать? Я полагаю, мне нужно что-то сделать в onActivityResult
методе.
Я оставил свой текущий код приложения, который отлично работает! ПРИМЕЧАНИЯ: Растровое newPhoto
изображение содержит фотографию, сделанную камерой 😉
Спасибо вам за ваши ответы!
private void saveFileToDrive() {
//Start creating new content and setting a callback
Log.i(TAG, "Creating new Content");
final Bitmap image = newPhoto;
Drive.DriveApi.newDriveContents(mGoogleApiClient)
.setResultCallback(new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(@NonNull DriveContentsResult result) {
//if operation was not successful we cannot do anything
//and ust fail
if (!result.getStatus().isSuccess()) {
Log.i(TAG, "Fail to create new content");
return;
}
// otherwise, we can write our data to the new content
Log.i(TAG, "New content created");
//creation of an outputstream for the new content
OutputStream outputStream = result.getDriveContents().getOutputStream();
//Write the bitmap data from it
ByteArrayOutputStream bitmapStream = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, bitmapStream);
try {
outputStream.write(bitmapStream.toByteArray());
} catch (IOException e1) {
Log.i(TAG, "Unable to write file contents");
}
// Create the initial metadata (Type non title)
// NB: user is able to change the title
MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder()
.setMimeType("image/jpeg")
.setTitle(imageFileName ".jpg").build();
// Create an intent for the file chooser
IntentSender intentSender = Drive.DriveApi
.newCreateFileActivityBuilder()
.setInitialMetadata(metadataChangeSet)
.setInitialDriveContents(result.getDriveContents())
.build(mGoogleApiClient);
try {
startIntentSenderForResult(intentSender, DRIVE_REQUEST, null, 0, 0, 0);
} catch (SendIntentException e) {
Log.i(TAG, "Fail to lauch file chooser");
}
}
});
}
Комментарии:
1.
image.compress(Bitmap.CompressFormat.PNG, 100, bitmapStream);
. Изменитеimage.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
и устраните поток вывода массива байтов.2.
// Create an intent for the file chooser
. Не понимаю этого. Вы только что сохранили содержимое на Google Диске. Почему вы выбрали файл сейчас?3. Я согласен с вашим первым ответом. спасибо за второе, я хочу предоставить пользователю возможность изменить имя файла и выбрать другую папку, в которую загружается изображение. Не знаете, как получить URL-адрес?