1
A
回答
1
我知道這是一個相當古老的問題,但我會用我用過的代碼回答它。根據我的經驗,並非所有的設備都能夠使用標準的意圖,並將數據返回到OnActivityResult
。
private void TakePicture()
{
if (PackageManager.HasSystemFeature(PackageManager.FeatureCamera))
{
var intent = new Intent(Android.Provider.MediaStore.ActionImageCapture);
var file = new File(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures), "PictureTHIS");
if (!file.Exists())
{
if (!file.Mkdirs())
{
Log.Debug(Constants.LOG_TAG, "Unable to create directory to save photos.");
return;
}
}
_file = new File(file.Path + File.Separator + "IMG_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".jpg");
intent.PutExtra(MediaStore.ExtraOutput, Uri.FromFile(_file));
StartActivityForResult(intent, Constants.CAMERA_ACTIVITY);
}
else
{
Toast.MakeText(this, "This device does not have a camera, please select an image from another option.", ToastLength.Short).Show();
}
}
我用這個作爲參考,介紹如何處理一些不會返回意圖的設備。 http://kevinpotgieter.wordpress.com/2011/03/30/null-intent-passed-back-on-samsung-galaxy-tab/
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (resultCode == Result.Ok)
{
//checking for camera acitivy, my app allows both gallery and camera for retrieving pictures.
if (requestCode == Constants.CAMERA_ACTIVITY)
{
//some devices do not pass back an intent so your data could be null
if (data != null && !string.IsNullOrEmpty(data.DataString))
{
//full uri to where the image is on the device.
Android.Net.Uri.Parse(data.DataString);
}
else
{
//issue where some devices don't pass back correct data from the intent.
var uris = GetImagePathFromCamera();
if (uris == null)
{
//had an issue with some devices with no sd card, so i create the file and store it on the device
var orientation = 0;
var date = string.Empty;
//_file is a java.io.file that is passed in the intent with get extra specified.
try
{
var exif = new ExifInterface(_file.Path);
orientation = exif.GetAttributeInt(ExifInterface.TagOrientation, -1);
date = exif.GetAttribute(ExifInterface.TagDatetime);
}
catch { }
switch (orientation)
{
case 6:
Helpers.Orientation = 90;
break;
case 3:
Helpers.Orientation = 180;
break;
case 8:
Helpers.Orientation = 270;
break;
default:
Helpers.Orientation = 0;
break;
}
ContentValues values = new ContentValues();
values.Put(Android.Provider.MediaStore.Images.Media.InterfaceConsts.DisplayName, _file.Name);
values.Put(Android.Provider.MediaStore.Images.Media.InterfaceConsts.DateTaken, date);
values.Put(Android.Provider.MediaStore.Images.Media.InterfaceConsts.MimeType, "image/jpeg");
values.Put(Android.Provider.MediaStore.Images.Media.InterfaceConsts.Orientation, Helpers.Orientation);
values.Put(Android.Provider.MediaStore.Images.Media.InterfaceConsts.Data, _file.Path);
var uri = ContentResolver.Insert(Android.Provider.MediaStore.Images.Media.ExternalContentUri, values);
//uri returned is the path to the image on the device
}
else
{
//uris is a list of uri's specifying the image taken and its thumbnail
}
};
}
}
else
{
//notify user the camera was cancelled if you want
}
}
相關問題
- 1. 從相機拍攝照片
- 2. 使用UIViewController(MonoTouch)相機拍攝照片
- 3. 相機照片拍攝失敗
- 4. IntentFilter相機和拍攝的照片
- 5. 的Android相機拍攝多張照片
- 6. 拍攝來自相機的照片
- 7. 使用CvVideoCamera拍攝照片
- 8. 使用QTCaptureView拍攝照片
- 9. Phonegap相機API保存拍攝到相機膠捲的照片
- 10. 使用Android相機拍攝照片後開始新活動
- 11. 閱讀使用相機拍攝的照片意向
- 12. 使用集成相機自動拍攝照片
- 13. 使用iPhone 7 Plus相機同時拍攝照片
- 14. 使用Android相機拍攝的照片的奇怪尺寸
- 15. 使用相機拍攝照片後堆內存越來越多
- 16. 使用Photos Framework獲取相機拍攝的照片的URL
- 17. 使用相機拍攝照片時的縮放選項
- 18. 如何使用相機拍攝的照片?
- 19. 使用相機拍攝照片後,意圖爲空
- 20. 如何在windows phone/desktop上使用相機拍攝照片/照片
- 21. 使用phonegap Camera Plugin從照相機卷中隨機拍攝照片?
- 22. 拍攝照片後無法選擇使用照片或重拍
- 23. 如何檢測照片是否被拍攝(照相機意圖)
- 24. 如何從照相機拍攝的照片製作縮略圖?
- 25. 從Galley和照相機拍攝照片在Tamarin.forms
- 26. 需要用MonoDroid和MVVMCross拍攝照片的一個例子
- 27. 在iOS中使用數碼相機拍攝相機中的照片
- 28. 用相機拍攝照片並用GWT上傳器發送
- 29. 相機拍攝照片在Android臨時保存圖片?
- 30. 拍攝照片並保存在SD卡或相機相冊PHONEGAP
我已經回答了這裏同樣的問題http://stackoverflow.com/questions/8068156/access-to-full-resolution-pictures-from-camera-with-monodroid/8072724#8072724 – mironych