我有一项活动,它首先要做的是发送相机意图。我希望用户拍照,然后我会用它来做某事。我的问题是,如果用户在拍摄照片时更改旋转,则应用程序会一直在相机内循环,直到他完成整个过程,同时保持单个设备方向。
以下是代码:
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 ();
}
我的问题是重新创建活动然后再次启动相机应用程序。我尝试了很多东西(这是干净的版本),但没有任何完美的工作......
有什么想法吗?
答案 0 :(得分:0)
这可能不是您正在寻找的解决方案,但您可以尝试在活动期间锁定屏幕旋转。
你可以在Android Manifest中设置它,如下所示:
<activity android:name="MyActivity"
android:screenOrientation="portrait">
...
</activity>
这将在旋转设备时防止活动重绘。如果您觉得景观布局更适合您的活动,显然您可以将“肖像”替换为“风景”。
答案 1 :(得分:0)
在我提出建议之前,我建议保存活动的状态,就像问题一样。
可悲的是,我失败了。 :)答案 2 :(得分:0)
要添加到Slack Shots,请回答您真正需要了解活动生命周期中发生的事情,您需要锁定应用程序的方向并防止更改或更好的方式(保存状态)或直接处理方向更改
http://developer.android.com/training/basics/activity-lifecycle/recreating.html