カメラを使用してアプリケーションのアクティビティの1つで写真を撮り、保存して、さらに使用するためにファイルの場所を返そうとしています。ただし、カメラ アクティビティで [OK] ボタンを押しても何も起こりません (ただし、作業はキャンセルされます)。
エミュレーターを使用しています。
カメラ アクティビティを呼び出すために使用されるコードがあります。
FindViewById<Button>(Resource.Id.exSetPicture).Click += delegate {
var dir = new Java.IO.File (
Android.OS.Environment.GetExternalStoragePublicDirectory (
Android.OS.Environment.DirectoryPictures), "MySuperbPictures");
if (!dir.Exists ()) {
dir.Mkdirs ();
}
_file = new Java.IO.File (dir, String.Format ("Picture\t{0}.jpg", Guid.NewGuid ()));
Intent cameraIntent = new Intent(Android.Provider.MediaStore.ActionImageCapture);
cameraIntent.PutExtra (MediaStore.ExtraOutput, Android.Net.Uri.FromFile (_file));
StartActivityForResult(cameraIntent, SET_NEW_PICTURE);
};
私が見つけた解決策は、私にはうまくいかないようでした:
- アプリの権限を確認する(カメラ、外部ストレージが設定されている)
- フォルダーが作成されていることを確認します (ブレークポイントは、if (!dir.Exists()) に入らないことを示しました)
- IntentExtra を直接 Uri.FromFile(folder) ではなく新しいファイルとして設定する
私は今のところ立ち往生しています..おそらく本当にばかげたものですが、なぜ機能しないのかわかりません..
助けていただければ幸いです:P
編集:
これは、それに関連する「OnActivityResult」の一部です。
protected override void OnActivityResult (int requestCode, Result resultCode, Android.Content.Intent data)
{
int ResultID = 0;
base.OnActivityResult (requestCode, resultCode, data);
if (data != null) {
if(resultCode == Result.Ok) {
switch (requestCode) {
case SET_NEW_PICTURE:
var contentUri = Android.Net.Uri.FromFile (_file);
PhotoLocation = contentUri.ToString();
FindViewById<Button>(Resource.Id.exViewPhoto).Visibility = Android.Views.ViewStates.Visible;
break;
default:
break;
}
}
}
}