在Samsung Galaxy S上以纵向模式“拍照并呈现”

我正尝试简单地拍摄一张照片,并用三星Galaxy S将它呈现在ImageView中。 当我在风景上做而不是在肖像上时它工作得很好。 我没有得到任何错误或例外 - 只是没有得到任何东西......关于这个话题有很多问题,它似乎有问题(关于相机方向的东西),但没有找出最终的解决方案,为一个简单的“拍照并呈现它“的代码。 这是我的(有问题的)代码不起作用:

private void setUpListeners() {
    takePicture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent cameraIntent = new Intent(
                    android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == CAMERA_PIC_REQUEST) {
            Log.d("onActivityResult", "CAMERA_PIC_REQUEST returned");
            dishImage = (Bitmap) data.getExtras().get("data");
            if (dishImage==null)
                Log.d("onActivityResult", "dishImage==null");
            imageView = (ImageView) findViewById(R.id.dishinfodishimageview);
            imageView.setImageBitmap(dishImage);
            imageView.setVisibility(View.VISIBLE);
            takePicture.setVisibility(View.GONE);
            (new UploadImage()).execute(null);
        }
    } else {
        Log.e("onActivityResult",
                "no able to presenting the picture of the dish");
    }

}

我只需要一个可用于任何设备的代码或修复我的代码... thx。


调用onCreate()的原因是因为当您在纵向定位期间调用相机活动时,它会改变方向并破坏以前的活动。 完成onActivityResult() ,您的活动将被重新创建。

解决这个问题的一个办法是将清单设置为忽略方向更改的更改,您可以通过使用以下方法来实现:

<activity android:name=".MyMainActivity"
     android:configChanges="orientation"
     android:label="@string/app_name" />

如果您使用API​​以13级开始,则可以考虑使用screenSize更改清单的screenSize。


我只能提出一个解决这个问题的方法。 将结果保存在onActivityResult()中的共享首选项中,以及onCreate在共享首选项中加载您的内容。 我知道这是一个不好的解决方案,但这会让你继续前进,直到找到更好的答案。 一旦完成,不要忘记清除您的共享偏好,否则您的活动将始终使用旧数据进行初始化。


尝试下面的代码..它与三星galaxy S2我的工作在OnActivityResult()中插入以下代码

ExifInterface exif = new ExifInterface(cameraimagename);
                    String orientString = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
                    int orientation = orientString != null ? Integer.parseInt(orientString) : ExifInterface.ORIENTATION_NORMAL;
                    int rotationAngle = 0;
                    System.out.println("orientation is : "+orientation);
                    System.out.println("ExifInterface.ORIENTATION_ROTATE_90 : "+ExifInterface.ORIENTATION_ROTATE_90);
                    System.out.println("ExifInterface.ORIENTATION_ROTATE_180 : "+ExifInterface.ORIENTATION_ROTATE_180);
                    System.out.println("ExifInterface.ORIENTATION_ROTATE_270 : "+ExifInterface.ORIENTATION_ROTATE_270);

                    if (orientation == ExifInterface.ORIENTATION_ROTATE_90) rotationAngle = 90;
                    if (orientation == ExifInterface.ORIENTATION_ROTATE_180) rotationAngle = 180;
                    if (orientation == ExifInterface.ORIENTATION_ROTATE_270) rotationAngle = 270;
                    System.out.println("Rotation Angle is : "+rotationAngle);
                    Matrix matrix = new Matrix();
                   // matrix.setRotate(rotationAngle, (float) photo.getWidth() / 2, (float) photo.getHeight() / 2);
                    matrix.postRotate(rotationAngle);

                    Bitmap rotatedBitmap=null;
                    try {
                        rotatedBitmap = Bitmap.createBitmap(photo, 0, 0, photo.getWidth(), photo.getHeight(), matrix, true);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
链接地址: http://www.djcxy.com/p/41841.html

上一篇: "take a picture and present it" in portrait mode on Samsung Galaxy S

下一篇: How to get orientation of device in android?