0

カメラを使用してアプリケーションのアクティビティの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;
                }
            }
        }
    }
4

1 に答える 1

0

問題が解決しました: Android はファイル名の "\t" が気に入らなかったようです...どういうわけか..これは Monodroid ドキュメント fml の一部です。

于 2013-02-08T13:56:27.113 に答える