Android使用相机应用程序

时间:2014-09-16 19:58:32

标签: android

在我的应用程序中,我正在使用手机上的相机应用程序来拍照。拍完照片后,它会返回我的应用程序。我注意到它在不同的手机中表现不同。在Galaxy s3中,我发现在拍照后它显示了图片,并提供了保存它(然后返回我的应用程序)或丢弃(并返回相机应用程序)的选项。问题是当屏幕旋转时,应用程序会在出现保存/放弃屏幕时崩溃。阻止它破碎的唯一方法是在不旋转屏幕的情况下拍摄照片并保持这种状态。

这个问题有解决方法吗?也许有一种方法我可以定义它不允许在这个屏幕上旋转?

以下是代码:

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

    //Specify target file
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

    newPicName = android.os.Environment.getExternalStorageDirectory() + "/"+app.APP_FOLDER + "/" + app.getSession()+ "_"+app.getDateTime()+ "_" +sdf.format(cal.getTime()) +".jpg";
    File imageFile = new File(newPicName);
    Uri imageFileUri = Uri.fromFile(imageFile);
    intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);


    startActivityForResult(intent, 0);

2 个答案:

答案 0 :(得分:0)

如果您只想限制屏幕的方向,则需要在清单中指定它...例如:

    <activity
        android:name="com.xxx"
        android:label="@string/xxx"
        android:screenOrientation="portrait" > //this limits the screen to only portrait.
    </activity>

其他信息 我就是这样做的,它对我来说非常有用。

 //instance variables
 private static final int            TAKE_PICTURE                  = 0;
 private Uri                         mUri;
 private Bitmap                      mPhoto;  

//First I create a method to capture the image.
 private void captureImage() {

    Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
    File f = new File(Environment.getExternalStorageDirectory(), "profile.jpg");
    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
    mUri = Uri.fromFile(f);
    startActivityForResult(i, TAKE_PICTURE);

}

//Then I handle the result.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case TAKE_PICTURE://this is a constant defined in my instance variables.
        if (resultCode == Activity.RESULT_OK) {
            getContentResolver().notifyChange(mUri, null);
            ContentResolver cr = getContentResolver();
            try {
                mPhoto = android.provider.MediaStore.Images.Media.getBitmap(cr, mUri);
            //set your photo in a screen…  
            } catch (Exception e) {
                Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    }
}

答案 1 :(得分:0)

请尝试以下代码:

    private File tempFile;

    private static final int CAMERA_IMAGE = 1;

    public void takePicFromCamera() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (tempFile != null) {
            Log.i(""image Path : "", tempFile.getPath());
            Uri picUri = Uri.fromFile(tempFile); // convert path to Uri
            intent.putExtra(MediaStore.EXTRA_OUTPUT, picUri);
            Log.i("Picture Uri", " : " + picUri);
        }
        startActivityForResult(intent, MedicationConstants.CAMERA_IMAGE);
    }


    public void onActivityResult(int requestCode, int resultCode, final Intent intent) {

        if (requestCode == MedicationConstants.CAMERA_IMAGE) {
            new Handler().postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        if (tempFile != null) {
                                            //do anything with image file. Store in database. Or even should add functionality of dropping
                                        }
                                    }
            }, 2000);
        }

    }

onActivityResult上,您应该添加图片裁剪功能。请看simple-crop-image-lib。这是一个很棒的图书馆和适用于几乎所有设备。

由于