卡在图像捕获屏幕上,无法回到onActivityResult(Android)

时间:2012-10-17 09:23:12

标签: android android-camera android-camera-intent image-capture

我有一个活动,通过启动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中设置了一个断点,并且它在此方法中没有停止。

3 个答案:

答案 0 :(得分:0)

以下是示例应用程序,它提供了使用相机或图库选择图像的选项,它还允许选择裁剪图像。我希望这正是你想要的。

请参阅此https://github.com/lorensiuswlt/AndroidImageCrop

它的开源下载并探索。

答案 1 :(得分:0)

这是我的相机意图代码。它完美无缺,您可以尝试使用它。

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

希望这有帮助。

答案 2 :(得分:0)

这已经很晚了,但这里的问题可能是缺少读/写权限。我自己就遇到了这个问题,而且我想把图像文件放到我自己的应用程序文件夹中,而相机应用程序无法访问该文件夹。

为安全起见,在应用之间共享文件时,请考虑使用Environment.getExternalStoragePublicDirectory(),而不是Environment.getExternalStorageDirectory()