Intereting Posts
Как настроить инъекцию зависимостей с помощью кинжала для вещей, отличных от действий и фрагментов? Ури вернулся после того, как ACTION_GET_CONTENT из галереи не работает в setImageURI () ImageView Требуется ли NDK для хорошей производительности при разработке Android-игры? Как отключить push-уведомление от отображения при запуске приложения? Регистрация SMS, как в мобильном приложении: whatsapp Верните приложение на передний план Загрузка анимации Android до начала видеообработки Как использовать новый API доступа к SD-карте, представленный для Android 5.0 (Lollipop)? Исключение nullpointer в oncreateView () фрагмента Значение RealEx Exception «значение» не является допустимым управляемым объектом Как решить этот эмулятор: ОШИБКА: неизвестное имя скина 'WVGA800' Волейбол не анализирует 404 ответ Как объединить несколько spannable объектов? Обход решения для приема системных передач с приложением, установленным на SD-карту? Пользовательский просмотр Расширение относительной компоновки

Извлечь изображение из библиотеки фотографий Google после загрузки

Я обедаю намерение получить фотографии из галереи, и с тех пор, как я использую nexus Google приложение для фотографий – это моя галерея, все работает отлично, но если изображение не на телефоне, то Google будет загружать его для меня, вот проблема после выбора изображения im отправки Изображение к другому действию для обрезки, но при загрузке их изображение отправляется на нулевую активность обрезки, так как загрузка еще не закончена, но как я могу узнать, когда загрузка закончена, чтобы отправить изображение в активность посева, как я могу контролировать его здесь Мой код:

enter code here private void pickFromGallery() { Intent galleryIntent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(galleryIntent, RESULT_LOAD_IMG); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); try { // When an Image is picked if (requestCode == RESULT_LOAD_IMG && resultCode == Activity.RESULT_OK && null != data) { // Get the Image from data Uri selectedImage = data.getData(); String[] filePathColumn = {MediaStore.Images.Media.DATA}; // Get the cursor Cursor cursor = getApplicationContext().getContentResolver().query(selectedImage, filePathColumn, null, null, null); // Move to first row assert cursor != null; cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); imgDecodableString = cursor.getString(columnIndex); cursor.close(); startCrop(imgDecodableString); } } catch (Exception e) { Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG) .show(); } } 

Любая помощь будет оценена по достоинству.

Solutions Collecting From Web of "Извлечь изображение из библиотеки фотографий Google после загрузки"

Я думаю, вы не можете обрезать изображения при загрузке выбранного изображения из фотографий Google. Вы можете обрезать только ваши локальные изображения

Но для проверки того, можно ли загрузить выбранное изображение или из локального хранилища, вы можете сделать это в своем onActivityResult() .

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (requestCode == RESULT_LOAD_IMG && resultCode == Activity.RESULT_OK && null != data) { Uri selectedImageUri = data.getData(); String tempPath = getPath(selectedImageUri, getActivity()); String url = data.getData().toString(); if (url.startsWith("content://com.google.android.apps.photos.content")){ try { InputStream is = getActivity().getContentResolver().openInputStream(selectedImageUri); if (is != null) { Bitmap pictureBitmap = BitmapFactory.decodeStream(is); //You can use this bitmap according to your purpose or Set bitmap to imageview } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else { startCrop(tempPath); } } } 

Вот метод getPath() который используется в onActivityResult() .

 public String getPath(Uri uri, Activity activity) { Cursor cursor = null; try { String[] projection = {MediaStore.MediaColumns.DATA}; cursor = activity.getContentResolver().query(uri, projection, null, null, null); if (cursor.moveToFirst()) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); return cursor.getString(column_index); } } catch (Exception e) { } finally { cursor.close(); } return ""; } 

Надеюсь, это поможет вам.

Вы не можете загружать изображения с диска Google ниже, это инструкции по загрузке изображений или файлов с диска.

Для загрузки изображений или файлов с диска Google требуется библиотека

  • Google-API-сервисов диск-v2-rev9-1.8.0-beta.jar ()

НАСТРОЙКА КОНСОЛИ

  • Затем перейдите в Google Consol

  • Создайте новый проект. В разделе «Службы» вам нужно включить две вещи: DRIVE API и DRIVE SDK! Они отделены друг от друга, никто не автоматически включит другой, и ВЫ ДОЛЖНЫ ОБРАТИТЬСЯ ОБ! (Полагая, что это потрачено впустую, по крайней мере, 20 часов моего времени.)

  • Еще на консоли перейдите в API Access. Создайте клиент, сделайте его Android-приложение. Дайте ему свой идентификатор пакета. Я не думаю, что отпечатки пальцев на самом деле важны, так как я уверен, что использовал неправильный, но стараюсь получить это право в любом случае (Google предоставляет инструкции для него).

  • Он будет генерировать идентификатор клиента . Тебе это понадобится. Держись.

ANDROID CODE – настройка и загрузка

  • Во-первых, получите токен аутентификации:

    AccountManager am = AccountManager.get (активность); Am.getAuthToken (am.getAccounts ()) [0], «oauth2:» + DriveScopes.DRIVE, новый Bundle (), true, новый OnTokenAcquired (), null);

Далее, OnTokenAcquired () необходимо настроить примерно так:

 private class OnTokenAcquired implements AccountManagerCallback<Bundle> { @Override public void run(AccountManagerFuture<Bundle> result) { try { final String token = result.getResult().getString(AccountManager.KEY_AUTHTOKEN); HttpTransport httpTransport = new NetHttpTransport(); JacksonFactory jsonFactory = new JacksonFactory(); Drive.Builder b = new Drive.Builder(httpTransport, jsonFactory, null); b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() { @Override public void initialize(JSonHttpRequest request) throws IOException { DriveRequest driveRequest = (DriveRequest) request; driveRequest.setPrettyPrint(true); driveRequest.setKey(CLIENT ID YOU GOT WHEN SETTING UP THE CONSOLE BEFORE YOU STARTED CODING) driveRequest.setOauthToken(token); } }); final Drive drive = b.build(); final com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File(); body.setTitle("My Test File"); body.setDescription("A Test File"); body.setMimeType("text/plain"); final FileContent mediaContent = new FileContent("text/plain", an ordinary java.io.File you'd like to upload. Make it using a FileWriter or something, that's really outside the scope of this answer.) new Thread(new Runnable() { public void run() { try { com.google.api.services.drive.model.File file = drive.files().insert(body, mediaContent).execute(); alreadyTriedAgain = false; // Global boolean to make sure you don't repeatedly try too many times when the server is down or your code is faulty... they'll block requests until the next day if you make 10 bad requests, I found. } catch (IOException e) { if (!alreadyTriedAgain) { alreadyTriedAgain = true; AccountManager am = AccountManager.get(activity); am.invalidateAuthToken(am.getAccounts()[0].type, null); // Requires the permissions MANAGE_ACCOUNTS & USE_CREDENTIALS in the Manifest am.getAuthToken (same as before...) } else { // Give up. Crash or log an error or whatever you want. } } } }).start(); Intent launch = (Intent)result.getResult().get(AccountManager.KEY_INTENT); if (launch != null) { startActivityForResult(launch, 3025); return; // Not sure why... I wrote it here for some reason. Might not actually be necessary. } } catch (OperationCanceledException e) { // Handle it... } catch (AuthenticatorException e) { // Handle it... } catch (IOException e) { // Handle it... } } } 

АНДРОИДНЫЙ КОД – Загрузка

 private java.io.File downloadGFileToJFolder(Drive drive, String token, File gFile, java.io.File jFolder) throws IOException { if (gFile.getDownloadUrl() != null && gFile.getDownloadUrl().length() > 0 ) { if (jFolder == null) { jFolder = Environment.getExternalStorageDirectory(); jFolder.mkdirs(); } try { HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(gFile.getDownloadUrl()); get.setHeader("Authorization", "Bearer " + token); HttpResponse response = client.execute(get); InputStream inputStream = response.getEntity().getContent(); jFolder.mkdirs(); java.io.File jFile = new java.io.File(jFolder.getAbsolutePath() + "/" + getGFileName(gFile)); // getGFileName() is my own method... it just grabs originalFilename if it exists or title if it doesn't. FileOutputStream fileStream = new FileOutputStream(jFile); byte buffer[] = new byte[1024]; int length; while ((length=inputStream.read(buffer))>0) { fileStream.write(buffer, 0, length); } fileStream.close(); inputStream.close(); return jFile; } catch (IOException e) { // Handle IOExceptions here... return null; } } else { // Handle the case where the file on Google Drive has no length here. return null; } } 

Вы можете использовать AsyncTask для загрузки (или копирования локального изображения), а затем обработать его.

В вашей деятельности создайте:

 private class PictureAsyncTask extends AsyncTask<Void, Void, String> { private Uri mUri; public PictureAsyncTask(Uri uri) { mUri = uri; } @Override protected String doInBackground(Void... params) { InputStream inputStream = null; try { inputStream = getContentResolver().openInputStream(mUri); String path = null; // Path of downloaded image // Download image from inputStream return path; } catch (Exception e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return null } @Override protected void onPostExecute(String path) { if (path == null) { // Process image // Maybe another AsyncTask or background thread? } else { // Download failed } } } 

Вызовите его из onActivityResult:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case RESULT_LOAD_IMG: if (resultCode == RESULT_OK) { if (data != null) { Uri uri = data.getData(); if (uri != null) { new PictureAsyncTask(uri).execute(); } else { // No data } } else { // No picture selected? } } break; } }