застрял на экране захвата изображения, не могу вернуться к onActivityResult (Android)

У меня есть действие, которое открывает камеру, запуская ACTION_IMAGE_CAPTURE. Намерение:

Intent intent = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

    SimpleDateFormat dateformat = new SimpleDateFormat("ddMMyy");


    File photo1 = new File(Environment
            .getExternalStorageDirectory(), imageName);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo1));
    startActivityForResult(intent, 5);

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

Я ставлю точку останова в OnActivityResult при отладке, и в этом методе она не останавливается.


person Hussam Lawen    schedule 17.10.2012    source источник


Ответы (3)


Вот пример приложения, которое дает возможность выбрать изображение с помощью камеры или галереи, а также позволяет обрезать изображение. Я надеюсь, что это именно то, что вы хотите.

См. это https://github.com/lorensiuswlt/AndroidImageCrop.

Загрузите его с открытым исходным кодом и изучите.

person Juned    schedule 17.10.2012

Вот мой код для намерения камеры. Он отлично работает, вы можете попробовать его использовать.

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

public class PlayMenuActivity extends Activity implements OnClickListener {

    Intent intent;
    ImageButton cameraBtn, galleryBtn, maleBtn, femaleBtn;
    static Bitmap photo;
    Dialog dialog;
    static String gender;
    MediaPlayer mp; 

    protected static final int PHOTO_PICKED = 0;
    private static final int CAMERA_REQUEST = 1337;
    private static final int SELECT_PHOTO = 100;
    private static final String TEMP_PHOTO_FILE = "tempPhoto.jpg";
    protected boolean circleCrop = true;
    private final static String TAG = "GetImageFromGalleryActivity";


    // values for scaling image
    protected int outputX = 320;
    protected int outputY = 480;
    protected int aspectX = 2;
    protected boolean scale = true;
    protected int aspectY = 3;
    protected boolean return_data = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i("hello", "oncreate PlayMenu");
        setContentView(R.layout.play_menu_screen);//setting layout
        //Image Buttons on activity screen
        cameraBtn = (ImageButton) findViewById(R.id.cameraBtn_id);
        galleryBtn = (ImageButton) findViewById(R.id.galleryBtn_id);
        cameraBtn.setOnClickListener(this);
        galleryBtn.setOnClickListener(this);
        // sound played when button clicked
        mp = MediaPlayer.create(this, R.raw.click);



    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.cameraBtn_id:
            // camera intent for starting camera
            Intent cameraIntent = new Intent(
                    android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            cameraIntent.putExtra("crop", "true");
            cameraIntent.putExtra("aspectX", aspectX);
            cameraIntent.putExtra("aspectY", aspectY);
            cameraIntent.putExtra("outputX", outputX);
            cameraIntent.putExtra("outputY", outputY);
            cameraIntent.putExtra("scale", scale);
            cameraIntent.putExtra("category", "camera");
            startActivityForResult(cameraIntent, CAMERA_REQUEST);

            break;

        case R.id.galleryBtn_id:
            // calling GalleryActivity for picking image from gallery
            intent = new Intent(PlayMenuActivity.this, GalleryActivity.class);

            startActivity(intent);
            break;

        default:
            break;
        }

    }

    /* creates bitmap of the captured photo */
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        // Log.i("hello", "REQUEST cALL");
        //if a camera request is made and resultcode matches then bitmap is created
        if (requestCode == CAMERA_REQUEST || resultCode == Activity.RESULT_OK) {
            Log.i("hello", "REQUEST cALL");
            try {
                Log.i("hello", "Try Call");
                Bitmap bMap = (Bitmap) data.getExtras().get("data");//creating bitmap 


                photo = bMap;
                Intent intent = new Intent(PlayMenuActivity.this,
                        ShowActivity.class);
                intent.putExtra("category", "camera");//adding category selected ie camera
                startActivity(intent);

            } catch (Exception e) {
                Log.i("hello", "Exception" + e.getMessage());
            }

        } else {
            // Log.i("hello", "Else call");

            Toast.makeText(PlayMenuActivity.this, "Picture NOt taken",
                    Toast.LENGTH_LONG).show();
        }

    } // fn



}// class

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

person Rachita Nanda    schedule 17.10.2012

это очень поздно, но проблема здесь может заключаться в отсутствии прав на чтение/запись. У меня самой была эта проблема, и это было связано с тем, что я хотел поместить файл изображения в свою собственную папку приложения, к которой у приложения камеры не было доступа.

В целях безопасности при обмене файлами между приложениями рассмотрите возможность использования Environment.getExternalStoragePublicDirectory() вместо Environment.getExternalStorageDirectory().

person ghost23    schedule 25.07.2014