Выход из приложения Android при выборе изображения

Я блокирую выход из моего приложения без какого-либо уведомления, когда я выбираю изображения, но при выборе фотографии или галереи на форуме не происходит сбой. я использую creativesdk для фото отредактировано.

screnshoot

package com.lamba.selfie;

import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.widget.ImageView;

import com.aviary.android.feather.sdk.AviaryIntent;

public class MainActivity extends AppCompatActivity {
    private ImageView mResultImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mResultImageView = (ImageView) findViewById(R.id.resultImageView);


        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,
                "Select Picture"), 0);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case 0:
                    Uri selectedImageUri = data.getData();
                    Uri imageUri = Uri.parse(getPath(selectedImageUri));
                    Intent imageEditorIntent = new AviaryIntent.Builder(this)
                            .setData(imageUri)
                            .build();
                    startActivity(imageEditorIntent);
                /*case 1:
                    startActivityForResult(imageEditorIntent, 1);
                    Uri mImageUri = data.getData();
                    mResultImageView.setImageURI(mImageUri);
                    break;*/
            }
        }
    }

    public String getPath(Uri uri) {
        // just some safety built in
        if (uri == null) {
            // TODO perform some logging or show user feedback
            return null;
        }
        // try to retrieve the image from the media store first
        // this will only work for images selected from gallery
        String[] projection = {MediaStore.Images.Media.DATA};
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }
        // this is our fallback here
        return uri.getPath();


    }


}

Как я мог это исправить?

3 ответа

Источник проблемы

Вы можете упростить свой switch заявления case 0 немного и пройти selectedImageUri прямо к AviaryIntent"s setData() метод.

В результате вам не понадобится ваш getPath() вспомогательный метод.

Пример кода

Ниже приведен рабочий код, основанный на вашем коде выше, который будет:

  1. Немедленно откройте средство выбора источника изображения
  2. Откройте выбранное изображение в редакторе изображений Creative SDK.
  3. Прикрепить отредактированное изображение к ImageView

Посмотрите комментарии в примере кода, чтобы узнать, где происходят эти вещи.

public class MainActivity extends AppCompatActivity {

    private ImageView mSelectedImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        mSelectedImageView = (ImageView) findViewById(R.id.selectedImageView);

        // Open the image source chooser immediately
        Intent galleryIntent = new Intent();
        galleryIntent.setType("image/*");
        galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(galleryIntent, "Select an image"), 0);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK) {
            switch (requestCode) {

                // Open the Creative SDK Image Editor with the chosen image
                case 0:
                    Uri selectedImageUri = data.getData();
                    Intent imageEditorIntent = new AviaryIntent.Builder(this)
                            .setData(selectedImageUri)
                            .build();

                    startActivityForResult(imageEditorIntent, 1);

                    break;


                // Attach the edited image to the ImageView
                case 1:
                    Uri editedImageUri = data.getData();
                    mSelectedImageView.setImageURI(editedImageUri);

                    break;
            }
        }

    }

    // ...
}

Попытайтесь изменить истину на ложь в вашей активности в файле манифеста.

android:noHistory="true" to android:noHistory="false"

Ваш код: galleryIntent.setAction(Intent.ACTION_GET_CONTENT)

Используйте это: Intent GalleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);

Другие вопросы по тегам