Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用相机时未调用OnActivityResult()?_C#_Android_Android Intent_Android Activity_Xamarin.android - Fatal编程技术网

C# 使用相机时未调用OnActivityResult()?

C# 使用相机时未调用OnActivityResult()?,c#,android,android-intent,android-activity,xamarin.android,C#,Android,Android Intent,Android Activity,Xamarin.android,我正在尝试在我的Xamarin.Android应用程序中创建一个有按钮的页面(我们称之为第2页),当你按下该按钮时,相机应用程序就会打开。然后你拍了一张照片,接受了你拍的照片,然后你应该回到原来有摄像头按钮的页面(第2页),你拍摄的图像将显示在按钮下 问题是,在您接受图片后,我的重写OnActivityResult()方法永远不会被调用。你按下按钮,相机应用程序打开,你拍照,接受照片,相机应用程序关闭,你回到相机按钮页面之前的页面(因此你现在在第1页)。我认为相机应用程序本身正在崩溃?我不知道如

我正在尝试在我的Xamarin.Android应用程序中创建一个有按钮的页面(我们称之为第2页),当你按下该按钮时,相机应用程序就会打开。然后你拍了一张照片,接受了你拍的照片,然后你应该回到原来有摄像头按钮的页面(第2页),你拍摄的图像将显示在按钮下

问题是,在您接受图片后,我的重写OnActivityResult()方法永远不会被调用。你按下按钮,相机应用程序打开,你拍照,接受照片,相机应用程序关闭,你回到相机按钮页面之前的页面(因此你现在在第1页)。我认为相机应用程序本身正在崩溃?我不知道如何找到那些日志。有时,弹出窗口会显示“不幸的是,相机停止了”。我猜这就是我试图将拍摄的照片保存到手机本身的方式?我看到的唯一错误是在设备日志中,有时它会抛出一个权限错误,说我没有权限写入手机上的存储设备,但我在清单文件中有“写入”权限。我的目标是API 26

有什么想法吗

以下是单击按钮的方法:

private int PIC_REQUEST_CODE = 1;
private ImageView imageView;
private Java.IO.File image;

private void Button_Click(object sender, EventArgs e)
    {
      Intent takePictureIntent = new Intent(MediaStore.ActionImageCapture);
      if (takePictureIntent.ResolveActivity(PackageManager) != null)
      {
        try
        {
          // Create an image file name
          string timeStamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
          string imageFileName = "JPEG_" + timeStamp + "_";
          Java.IO.File storageDir = GetExternalFilesDir(global::Android.OS.Environment.DirectoryPictures);
          Java.IO.File image = Java.IO.File.CreateTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
          );

          global::Android.Net.Uri photoURI = FileProvider.GetUriForFile(ApplicationContext, PackageName + ".fileprovider", image);
          takePictureIntent.PutExtra(MediaStore.ExtraOutput, photoURI);
          takePictureIntent.AddFlags(ActivityFlags.GrantWriteUriPermission);

          StartActivityForResult(takePictureIntent, PIC_REQUEST_CODE);
        }
        catch (Exception ex)
        {
          //Not sure what to do, but here's a break point at least.
          Toast.MakeText(this, "blah blah something went wrong", ToastLength.Short).Show();
        }
      }
    }
下面是我的简单OnActivityResult,它被跳过/从未调用:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
      if (requestCode == PIC_REQUEST_CODE && resultCode == Result.Ok)
      {
        Bitmap bitmap = (Bitmap)data.Extras.Get("data");
        imageView.SetImageBitmap(bitmap);
      }
    }

我发现了当前无法调用OnActivityResult()的问题。在我宣布的班级的最上面

[Activity(Label = "@string/page_name", ScreenOrientation = ScreenOrientation.Portrait, NoHistory = true)]

这里重要的一点是“NoHistory=True”,这显然会使页面退出并返回到上一页。删除“NoHistory=true”有效,并使其能够调用OnActivityResult()。关于它的一些文档说,“值'true'意味着活动不会留下历史跟踪。它不会保留在任务的活动堆栈中,因此用户将无法返回到它。”所以我想这是有道理的。

您的意思是在OnActivityResult()中有一个if(resultCode!=Result.Ok)?代码根本不会进入OnActivityResult()方法。所以我无法检查if()语句。我测试了您提供的代码。捕获图像并选择勾号后,将触发激活结果。@WendyZang MSFT right,它将被触发。但对我来说,它不会被触发。