0

我有一个活动,它做的第一件事就是发送相机意图。我希望用户拍照,然后我会用它来做一些事情。我的问题是,如果用户在拍照时更改旋转,应用程序会继续在相机内循环,直到他完成整个过程,同时保持单一设备方向。

这是代码:

protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);
        _dateTextView = FindViewById<TextView> (Resource.Id.DateLabel);
        ViewModel.RecomendDishViewModel.RecomendationSent += RecomendationSent;
        if (IsThereAnAppToTakePictures())
        {
            CreateDirectoryForPictures();
            var imageButton = FindViewById<ImageButton> (Resource.Id.TakeImageWaterMark);
            _imageView = FindViewById<ImageView> (Resource.Id.UserDishImage);
            imageButton.Click += TakePictureClicked;
            if(_bitmap != null)
            {
                _imageView.RecycleBitmap ();
                _imageView.SetImageBitmap(_bitmap);
            }
        }
        _dateTextView.Click += DateLabelClicked;
        TakePictureClicked ()
    }
protected void TakePictureClicked ()
    {
        Intent intent = new Intent(MediaStore.ActionImageCapture);
        _file = new Java.IO.File(_dir, String.Format("myPhoto_{0}.jpg", Guid.NewGuid()));
        intent.PutExtra(MediaStore.ExtraOutput, Uri.FromFile(_file));
        StartActivityForResult(intent, 0);
    }
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);

        // make it available in the gallery
        Intent mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
        Uri contentUri = Uri.FromFile(_file);
        mediaScanIntent.SetData(contentUri);
        SendBroadcast(mediaScanIntent);

        // display in ImageView. We will resize the bitmap to fit the display
        // Loading the full sized image will consume to much memory 
        // and cause the application to crash.
        _bitmap = _file.Path.LoadAndResizeBitmap (518, 388);
        if(_bitmap != null)
        {
            MemoryStream stream = new MemoryStream();
            _bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
            byte[] bitmapData = stream.ToArray();
            ViewModel.RecomendDishViewModel.ImageData = bitmapData;
            if(_imageView == null)
            {
                return;
            }
            _imageView.RecycleBitmap ();
            _imageView.SetImageBitmap(_bitmap);
        }
        _file.Dispose ();
        _dir.Dispose ();
    }

我的问题是活动被重新创建,然后再次启动相机应用程序。我已经尝试了很多东西(这是干净的版本),但没有一个完美的...

有任何想法吗?

4

3 回答 3

0

要添加到 Slack Shots 答案中,您确实需要了解活动生命周期内发生的情况,您需要锁定应用程序的方向并防止更改或更好的方法(保存状态)或直接处理方向更改。

http://developer.android.com/training/basics/activity-lifecycle/recreating.html

于 2013-08-14T12:53:55.777 回答
0

在我给出建议之前,我建议像问题一样保存活动的状态。

可悲的是,我失败了。:)

保存状态

于 2013-08-13T02:56:33.717 回答
0

这可能不是您正在寻找的解决方案,但您可以尝试在活动期间简单地锁定屏幕旋转。

您可以像这样在 Android Manifest 中进行设置:

<activity android:name="MyActivity" 
android:screenOrientation="portrait">
...
</activity>

这将防止活动在设备旋转时重绘。显然,如果您认为横向布局更适合您的活动,您可以将“纵向”替换为“横向”。

于 2013-08-12T19:25:03.600 回答